1. 程式人生 > >Image Processing for Computer Graphics and Vision

Image Processing for Computer Graphics and Vision

影象的灰度直方圖(H是影象a.bmp的資料矩陣)

imhist(H);%顯示a的直方圖

histeq(H); %將影象a進行直方圖均衡化

adapthisteq(H); %將影象a進行直方圖均衡化

imhist函式只能處理二維資料,因此處理RGB影象,需先轉化成灰度影象,顯示灰度直方圖。

例1:顯示影象灰度直方圖並進行直方圖均衡化

H=rgb2gray(imread('peppers.png'));
subplot(3,2,1);
imshow(H);
title('原圖');
subplot(3,2,2);
imhist(H);
title('原圖直方圖');
subplot(3,2,3);
H1=adapthisteq(H);
imshow(H1);
title('adapthisteq均衡後圖');
subplot(3,2,4);
imhist(H1);
title('adapthisteq均衡後直方圖');
subplot(3,2,5);
H2=histeq(H);
imshow(H2);
title('histeq均衡後圖');
subplot(3,2,6);
imhist(H1);
title('histeq均衡後直方圖');


例2: 自己設計程式顯示直方圖,並實現直方圖均衡化。

直方圖均衡化是直方圖修正技術的一種。一幅均勻量化的自然影象的灰度直方圖通常在低灰度區域的頻率較大,這樣的影象較暗,區域中的細節常常看不清楚。

直方圖均衡化可使得影象的灰度間距拉大或者使灰度分佈均勻,從而增加了反差,使影象細節清晰,達到影象增強的目的。

x=rgb2gray(imread('peppers.png'));
[m,n]=size(x);
p=zeros(1,256);
for i=0:255
   p(i+1)=length(find(x==i))/(m*n);
end
subplot(2,2,1);
bar(0:255,p,'b');
title('原圖直方圖');
subplot(2,2,2);
imshow(x);
title('原圖');
 
s=zeros(1,256);
for i=1:256
     for j=1:i
         s(i)=p(j)+s(i);                
     end
end
 
a=round(s*255);
for i=0:255
    GPeq(i+1)=sum(p(find(a==i)));          
end
subplot(2,2,3);
bar(0:255,GPeq,'b')                 
title('均衡化後的直方圖');
b=x;
for i=0:255
     b(find(x==i))=a(i+1);              
end
subplot(2,2,4);
imshow(b)                          
title('均衡化後圖像');