本文將@wsywl與@wesleyluo兩位的博客經過自己的想法重新試了一下,效果不錯。
MyYuanLaipic = imread('lena.jpg');%讀取RGB格式的圖像MyFirstGrayPic = rgb2gray(MyYuanLaiPic);%用已有的函數進行RGB到灰度圖像的轉換[rows , cols , colors] = size(MyYuanLaiPic);%得到原來圖像的矩陣的參數MidGrayPic = zeros(rows , cols);%用得到的參數創建一個全零的矩陣,這個矩陣用來存儲用下面的方法產生的灰度圖像OldGrayPic = zeros(rows , cols);OldGrayPic = uint8(OldGrayPic);MidGrayPic = uint8(MidGrayPic);%將創建的全零矩陣轉化為uint8格式,因為用上面的語句創建之后圖像是double型的%uint8是指0~2^8-1 = 255數據類型for i = 1:rows for j = 1:cols sum = 0; sumold = 0; for k = 1:colors sumold = sumold + MyYuanLaiPic(i , j , k) / 3;%進行轉化的關鍵公式,sum每次都因為后面的數字而不能超過255 switch k case{1} m = 0.299; case{2} m = 0.587; case{3} m = 0.114; end sum = sum + MyYuanLaiPic(i , j , k)*m; end MidGrayPic(i , j) = sum; OldGrayPic(i , j) = sumold; endend%imwrite(MidGrayPic , 'E:/image/matlab/DarkMouseGray.png' , 'png');imwrite(MidGrayPic , 'DarkMouseGray.png' , 'png');imwrite(OldGrayPic , 'OldGray.png' , 'png');%顯示原來的RGB圖像figure(1);imshow(MyYuanLaiPic);%顯示經過系統函數運算過的灰度圖像figure(2);imshow(MyFirstGrayPic);%顯示經過其他人設計的函數運算過的灰度圖像figure(3);imshow(OldGrayPic);%顯示自制的轉化之后的灰度圖像figure(4);imshow(MidGrayPic);顯示結果如下

灰度圖是指只含亮度信息,不含色彩信息的圖象,就象我們平時看到的黑白照片:亮度由暗到明,變化是連續的。因此,要表示灰度圖,就需要把亮度值進行 量化。通常劃分成0到255共256個級別,其中0最暗(全黑),255最亮(全白)。在表示顏色的方法中,除了RGB外,還有一種叫YUV的表示方法, 應用也很多。電視信號中用的就是一種類似于YUV的顏色表示方法。在這種表示方法中,Y分量的物理含義就是亮度,Y分量包含了灰度圖的所有信息,只用Y分 量就能完全能夠表示出一幅灰度圖來。 從 RGB 到 YUV 空間的 Y 轉換公式為: Y = 0.299R+0.587G+0.114B 這是依據的原理 與圖二原始灰度相比,可以看出圖四恢復出的圖像效果更好一些。## matlab實現將彩色圖像轉換成灰色圖像的方法 ##
新聞熱點
疑難解答