數字圖像處理(一)
- 一、什么是圖像:圖像就是多維數組
- 圖像的存儲
- 每一個格子有自己的顏色、深淺
- 如何訪問圖像:
- 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,那么有玩家就會想到,將圖像轉換到其他的域,比如頻率域,在變換域做完處理之后再通過反變換方式轉換回來。