【圖像處理】彩色圖像處理(Color Image Processing)

實驗要求

  (1.a) 編寫程序實現圖6.23,程序的輸入爲圖像中指定的兩個灰度級範圍。程序的輸出爲RGB 格式圖像,其中,一個灰度級範圍顯示爲指定的彩色,其餘的像素以RGB 形式顯示爲與輸入圖像對應像素相同的灰度色。

  (1.b) 用上述程序對圖1.10(4)進行處理,要求使河流呈現爲黃色,其餘區域像素與原輸入圖像灰度保持一致。在結果圖像中一些孤立區域一般也會呈現黃色,因此需要選取合適的灰度級範圍,使這樣的區域儘可能少。

  (2.a) 將dark-stream 圖6.35 (該圖即圖6.35(05))轉換爲RGB 分量圖。用直方圖均衡化程序對R, G 和B分量圖分別進行直方圖均衡化,然後將結結果圖轉換回jpg 格式。

  (2.b) 用(2.a)中的三個直方圖構成一個平均直方圖,以此直方圖爲基礎得到單一的直方圖均衡化強度變換函數。將該函數分別單獨作用到R, G 和B 分量圖上,將結果圖轉換爲jpg 格式。比較並解釋(2.a)和(2.b)中圖像的差異。


技術論述

1、僞彩色圖像處理

  僞彩色(也稱假彩色)圖像處理是指基於一種指定的規則對灰度值賦以顏色的處理。 僞彩色用於區分對單色圖像賦予彩色的處理和與真彩色圖像相關的處理,應用於人目視觀察和解釋單幅圖像或序列圖像鐘的灰度級事件。使用彩色的動力之一是人類可以辨識幾千種色調和強度,而相比之下只能辨別20多種灰度。

這裏寫圖片描述

2、灰度分層

  灰度分層(也稱密度分層)是僞彩色圖像處理最簡單的例子之一。如果一副圖像被描述爲三維圖像,則分層方法可以看成是放置一些平行於該圖像的座標平面,然後,每個平面在相交的區域中“切割”圖像函數。下圖是通過一個平面將圖像函數分割爲兩部分的一個例子。

  實驗中,要求程序的輸入爲圖像中指定的兩個灰度級範圍。程序的輸出爲RGB 格式圖像,其中,一個灰度級範圍顯示爲指定的彩色,其餘的像素以RGB 形式顯示爲與輸入圖像對應像素相同的灰度色。可通過灰度分層方法進行實現,設定灰度級範圍即使用兩個平面以“切割”圖像,使得灰度級範圍內的圖像按照要求顯示相應彩色顏色。

這裏寫圖片描述

3、對RGB分量圖進行直方圖均衡化

這裏寫圖片描述

  直方圖均衡化的基本思想是對圖像中像素個數多的灰度級進行擴展,而對圖像中像素個數少的灰度進行壓縮,從而擴展像素的取值範圍,提高對比度和灰度色調的變化,使圖像更加清晰。

  直方圖均衡化一來可以提高圖像的對比度,二來可以把圖像變換成像素值是幾乎均勻分佈的圖像。

  假定r已經標準化在[0,1]區間內,r=0表示黑色,r=1表示白色,變換函數爲:

s=T(r), 0 =< r < = 1,

  滿足以下條件: (a)T(r)是一單值函數,並且在區間[0,1]單調遞增; (b)對 0 <= r <= 1,0<= T(r) <=1。

這裏寫圖片描述


實驗結果

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述


實驗程序

% --------------------------------------------------第1問----------------------------------------------

f1 = imread('Fig1.10(4).jpg');
f1_change = change_color(f1,0,20);

subplot(2,1,1);imshow(f1);title('圖像Fig1.10(4)');
subplot(2,1,2);imshow(f1_change);title('河流呈現爲黃色');


% --------------------------------------------------第2問----------------------------------------------

f2 = imread('Fig6.35(5).jpg');

r = f2(:,:,1);                             % R分量
g = f2(:,:,2);                             % G分量
b = f2(:,:,3);                             % B分量

% ---------用直方圖均衡化程序對R, G 和B分量圖分別進行直方圖均衡化-------------

r_equal = hist_equal(r);                    % 直方圖均衡化
g_equal = hist_equal(g);
b_equal = hist_equal(b);

img_equal(:,:,1) = r_equal;                 % 將RGB分量圖轉換爲單一RGB圖像
img_equal(:,:,2) = g_equal;
img_equal(:,:,3) = b_equal;

% -------用平均直方圖均衡化強度變換函數分別作用到R, G 和B分量圖上-------------

r_hist = imhist(r);
g_hist = imhist(g);
b_hist = imhist(b);
mean_hist = (r_hist + g_hist + b_hist)/3.;  % 計算平均直方圖

r1 = match(r,mean_hist);                    % 直方圖匹配
g1 = match(g,mean_hist);
b1 = match(b,mean_hist);

img_mean(:,:,1) = r1;                       % 將RGB分量圖轉換爲單一RGB圖像
img_mean(:,:,2) = g1;
img_mean(:,:,3) = b1;


% ---------------------------------------------顯示圖像----------------------------------------------

figure;                                   
subplot(2,1,1);imshow(f2);title('圖像Fig6.35(5)');
subplot(2,1,2);imshow(img_equal);title('分別直方圖均衡化後結果');
imwrite(img_equal,'img_equal.jpg','jpg');   % 轉換回jpg格式

figure;
subplot(3,2,1);imhist(r);title('R分量直方圖');                    
subplot(3,2,2);imhist(r_equal);title('% R分量均衡化後直方圖');             
subplot(3,2,3);imhist(g);title('G分量直方圖');
subplot(3,2,4);imhist(g_equal);title('% G分量均衡化後直方圖');     
subplot(3,2,5);imhist(b);title('B分量直方圖');
subplot(3,2,6);imhist(b_equal);title('% B分量均衡化後直方圖');     

figure;imshow(img_mean);title('平均直方圖均衡化後結果')
imwrite(img_mean,'img_mean.jpg','jpg');   % 轉換回jpg格式
function img_out = change_color(img,gray_low,gray_high)
% 根據題意,指定顏色爲黃色rgb(255,255,0)

[M,N] = size(img);

for m = 1:M
    for n = 1:N
        if img(m,n) >= gray_low && img(m,n) <= gray_high
            img_out(m,n,1) = 255;
            img_out(m,n,2) = 255;
            img_out(m,n,3) = 0;
        else
            img_out(m,n,1) = img(m,n);
            img_out(m,n,2) = img(m,n);
            img_out(m,n,3) = img(m,n);
        end
    end
end

end
function img_hist_equal = hist_equal(img)
% 直方圖均衡化

[M,N] = size(img);
img = double(img);
H = zeros(1,256);

for k = 0:255                                    % 獲取各個灰度級的數量
    for m = 1:M
        for n = 1:N
            H(k+1) = H(k+1) + (img(m,n) == k);
        end
    end
end

P = H/(M*N);                                    % 各個灰度級的概率

for k = 2:256                                     % 灰度級累計概率
    P(k) = P(k) + P(k-1);
end

I = uint8(round(P.*255)); % 從[0,1]映射到[0,255]

for m = 1:M
    for n = 1:N
        img_hist_equal(m,n) = I(img(m,n)+1);
    end
end
function img_equal = match(img,mean_hist)
% 直方圖匹配

[M,N] = size(img);
img = double(img);

P = mean_hist/(M*N);                           % 各個灰度級的概率

for k = 2:256                                  % 灰度級累計概率
    P(k) = P(k) + P(k-1);
end

for k = 1:256                                  % 從[0,1]映射到[0,255]
    I = uint8(round(P.*255));
end

for m = 1:M
    for n = 1:N
        img_equal(m,n) = I(img(m,n)+1);
    end
end

figure;
x = 0:255;
plot(x,P(x+1));
title('直方圖均衡化變換函數圖');

end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章