数字图像处理(一)
- 一、什么是图像:图像就是多维数组
- 图像的存储
- 每一个格子有自己的颜色、深浅
- 如何访问图像:
- 1.对于RGB图像,共有R/G/B三个通道,通过代码来看。图像有单通道和多通道之分,访问时只需要以多维数组的形式访问即可。
- 2.如果R/G/B都挤在一个格子里面
- 二、分析方向占地盘
- 空间域
- 空间域针对像素点的图像处理主要包括:
- 1.灰度变换
- 2.空间域滤波
- 2.1 空间域滤波:用不同的核kernel,也就是不同的 磨石,去挨个擦一遍每个像素点,每个像素点按照一定算法来跟磨石里面的数据求平均,然后把相当于用磨石把像素点的值改变了,这个过程也就是卷积。
- 变换域:
- 附加发散知识:LED赛道中大屏里面的那些事:
- 1.大屏中有很多箱体、很多模块/灯板,灯板上有很多LED灯,那这些灯如何亮,这里面就牵扯到很多知识点:
- 1.1 静态扫和非静态扫:
- 1.2 灯珠的亮度咋来的,通道打开时间 * 电流,波形上面就是矩形的面积,比如一个上升沿和一个下降沿,那么,包起来的矩形,高代表电流,宽代表通道打开时间。
一、什么是图像:图像就是多维数组
你好! 从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么。
图像的存储
比如,如下存储代码。
// 图像在内存中的实际存储(一维数组)
uint8_t image_data[16] = {R0,G0,B0, R1,G1,B1, R2,G2,B2, R3,G3,B3, // 第0行R4,G4,B4, R5,G5,B5, ... // 第1行// ... 后续行
};
…ISP…:
-
通过相机等成像系统等拍摄,数字化之后的图像就是二维/多维的矩阵/数组,也就是二维数据。图像的存储是以矩阵的形式存储,矩阵中的每一个格子代表一个像素。
- 如果想了解一些成像系统、图像、人眼、颜色等等的小知识,快去看看视频吧 :
- GodWarrior、抖音号:59412983611
- B站:宇宙第一AIYWM
- 认准一个头像,保你不迷路:
- 如果想了解一些成像系统、图像、人眼、颜色等等的小知识,快去看看视频吧 :
每一个格子有自己的颜色、深浅
如何访问图像:
1.对于RGB图像,共有R/G/B三个通道,通过代码来看。图像有单通道和多通道之分,访问时只需要以多维数组的形式访问即可。
//像素点有:宽Width、高 height、通道Channel
char image[nWidth][nHeight][nChannel];for(int i = 0; i < nHeight; i++)for(int j = 0; j < nWidth; j++)for(k = 0; k < nChannel; k++){cout << image[j][i][k]}//c++版本
#include <iostream>const int nWidth = 10; // 示例宽度
const int nHeight = 10; // 示例高度
const int nChannel = 3; // 示例通道数char image[nWidth][nHeight][nChannel];int main() {// 假设 image 数组已经被填充数据for(int i = 0; i < nHeight; i++) {for(int j = 0; j < nWidth; j++) {for(int k = 0; k < nChannel; k++) {std::cout << image[j][i][k];}}}return 0;
}//Goland
package mainimport ("fmt"
)const (nWidth = 10 // 示例宽度nHeight = 10 // 示例高度nChannel = 3 // 示例通道数
)func main() {var image [nWidth][nHeight][nChannel]byte// 假设 image 数组已经被填充数据for i := 0; i < nHeight; i++ {for j := 0; j < nWidth; j++ {for k := 0; k < nChannel; k++ {fmt.Print(image[j][i][k])}}}
}
2.如果R/G/B都挤在一个格子里面
for(int i = 0; i < nHeight; i++)for(int j = 0; j < nWidth; j+= 3){cout << image[j][i]; //Rcout << image[j + 1][i]; // Gcout << image[j + 2][i]; //B}
二、分析方向占地盘
既然图像具体化成为了数组和矩阵,那么下来就有了很多的针对性分析,比如
空间域
其实上面我们按照像素点去访问图像的话,其实就是在空间域访问图像呢,所以呢,空间域其实指的就是图像中的每个像素单元。起这个名字其实就是为了和其他的,比如下面的域区分开而已;
空间域针对像素点的图像处理主要包括:
图像是二维数据,正如上文所说,图像的存储是以矩阵的形式存储,矩阵中的每一个格子代表一个像素,二维数据传输的时候是逐行传输的,当传输图像数据时,系统会按照行优先顺序将二维矩阵转换为一维数据流:
1.灰度变换
2.空间域滤波
信号处理上,你对图像像素数据不停的一行一行的去处理,让他亮,并且你不能说我这个图像有三行三列,我就亮三次就行了,不行的,抛开亮不同的图像不说,你随着时间推移,你需要不停的亮起像素点,才能保证呈现给客户完整的视频或者图像画面。所以,此时就是一个连续的波形,但有时候电压或者电流太小或者太大会导致功耗、耦合、亮度一致性或者均匀性出现问题,所以需要按照预期过滤掉波形中的某些成分,也就是人们常说的滤波。降噪、平滑等就是在滤波。
2.1 空间域滤波:用不同的核kernel,也就是不同的 磨石,去挨个擦一遍每个像素点,每个像素点按照一定算法来跟磨石里面的数据求平均,然后把相当于用磨石把像素点的值改变了,这个过程也就是卷积。
变换域:
你图像反正是一堆装在格子里面的像素点,有自己的属性,Width、Height、Channel,那么有玩家就会想到,将图像转换到其他的域,比如频率域,在变换域做完处理之后再通过反变换方式转换回来。