1. 程式人生 > >RGB影象轉為灰度影象原理

RGB影象轉為灰度影象原理

RGB影象轉為灰度影象

今天在幫李娜同學看程式碼的時候,突然想到了要細究RGB影象轉換為灰度影象的原理。於是開始開始了這篇blog的故事。作為一個小白,闡述可能不是很具體全面。望指正,共同進步。
總的來說RGB影象是有3個通道,也就是一個3維的矩陣,而灰度圖,大家都知道只有一個通道,那麼如何將一個3通道的事物轉為1通道的事物呢?
其實這其中是有一個轉換公式的,簡單來說,就是把RGB3個通道的分量按照一定的比例計算到灰度影象中。即 公式(1)所闡述的那樣,Gray = R*0.299 + G*0.587 + B*0.114 (1)。當然也看過其他幾個對該公式的優化,但是自己在實踐的過程中效果不理想。有興趣的同學可以自己嘗試下。

% 自己實現的從RGB影象轉換為灰度影象
function gray = my_rgb2gray(im)
% Gray = R*0.299 + G*0.587 + B*0.114
[m,n,h] = size(im);
if h ==1
    gray = im;
end
gray =zeros(m,n);

for i = 1:m
    for j = 1:n
% 下面三句話就第一句的準確度最好
        gray(i,j) = 0.299*im(i,j,1) +0.587*im(i,j,2)+0.114*im(i,j,3);
% gray(i,j) = (im(i,j,1)*30 + im(i,j,2)*59+ im(i,j,3)*11+50)/100;
% gray(i,j) = (im(i,j,1)*299 + im(i,j,2)*587 + im(i,j,3)*114 + 500) / 1000; end end gray = uint8(gray); end

顯示的結果如下圖
執行結果