技术蛀虫

导航

彩色图直方图均衡化 .

首先转为灰度图,然后均衡化

01.sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');  
02.[m,n,o]=size(sourcePic);  
03.grayPic=rgb2gray(sourcePic);  
04.figure,imshow(sourcePic);  
05.figure,imshow(grayPic);  
06.  
07.gp=zeros(1,256); %计算各灰度出现的概率  
08.for i=1:256  
09.    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
10.end  
11.figure,bar(0:255,gp);  
12.title('原图像直方图');  
13.xlabel('灰度值');  
14.ylabel('出现概率');  
15.  
16.newGp=zeros(1,256); %计算新的各灰度出现的概率  
17.S1=zeros(1,256);  
18.S2=zeros(1,256);  
19.tmp=0;  
20.for i=1:256  
21.    tmp=tmp+gp(i);  
22.    S1(i)=tmp;  
23.    S2(i)=round(S1(i)*256);  
24.end  
25.for i=1:256  
26.    newGp(i)=sum(gp(find(S2==i)));  
27.end  
28.figure,bar(0:255,newGp);  
29.title('均衡化后的直方图');  
30.xlabel('灰度值');  
31.ylabel('出现概率');  
32.  
33.newGrayPic=grayPic; %填充各像素点新的灰度值  
34.for i=1:256  
35.    newGrayPic(find(grayPic==(i-1)))=S2(i);  
36.end  
37.figure,imshow(newGrayPic);  

当然,有时候我们不禁想得到一幅图的灰度直方图均衡化结果,而是希望得到彩色图均衡化结果,那么就需要先将彩色图分为RGB分量

01.sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');  
02.[m,n,o]=size(sourcePic);  
03.figure,imshow(sourcePic,[]);  
04.%grayPic=rgb2gray(sourcePic);  
05.grayPic=sourcePic(:,:,1);  
06.  
07.gp=zeros(1,256); %计算各灰度出现的概率  
08.for i=1:256  
09.    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
10.end  
11.  
12.newGp=zeros(1,256); %计算新的各灰度出现的概率  
13.S1=zeros(1,256);  
14.S2=zeros(1,256);  
15.tmp=0;  
16.for i=1:256  
17.    tmp=tmp+gp(i);  
18.    S1(i)=tmp;  
19.    S2(i)=round(S1(i)*256);  
20.end  
21.for i=1:256  
22.    newGp(i)=sum(gp(find(S2==i)));  
23.end  
24.  
25.newGrayPic=grayPic; %填充各像素点新的灰度值  
26.for i=1:256  
27.    newGrayPic(find(grayPic==(i-1)))=S2(i);  
28.end  
29.nr=newGrayPic;  
30.  
31.  
32.grayPic=sourcePic(:,:,2);  
33.  
34.gp=zeros(1,256); %计算各灰度出现的概率  
35.for i=1:256  
36.    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
37.end  
38.  
39.newGp=zeros(1,256); %计算新的各灰度出现的概率  
40.S1=zeros(1,256);  
41.S2=zeros(1,256);  
42.tmp=0;  
43.for i=1:256  
44.    tmp=tmp+gp(i);  
45.    S1(i)=tmp;  
46.    S2(i)=round(S1(i)*256);  
47.end  
48.for i=1:256  
49.    newGp(i)=sum(gp(find(S2==i)));  
50.end  
51.  
52.newGrayPic=grayPic; %填充各像素点新的灰度值  
53.for i=1:256  
54.    newGrayPic(find(grayPic==(i-1)))=S2(i);  
55.end  
56.ng=newGrayPic;  
57.  
58.  
59.  
60.grayPic=sourcePic(:,:,3);  
61.  
62.gp=zeros(1,256); %计算各灰度出现的概率  
63.for i=1:256  
64.    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
65.end  
66.  
67.newGp=zeros(1,256); %计算新的各灰度出现的概率  
68.S1=zeros(1,256);  
69.S2=zeros(1,256);  
70.tmp=0;  
71.for i=1:256  
72.    tmp=tmp+gp(i);  
73.    S1(i)=tmp;  
74.    S2(i)=round(S1(i)*256);  
75.end  
76.for i=1:256  
77.    newGp(i)=sum(gp(find(S2==i)));  
78.end  
79.  
80.newGrayPic=grayPic; %填充各像素点新的灰度值  
81.for i=1:256  
82.    newGrayPic(find(grayPic==(i-1)))=S2(i);  
83.end  
84.nb=newGrayPic;  
85.  
86.  
87.res=cat(3,nr,ng,nb);  
88.figure,imshow(res,[]);  

 

posted on 2012-06-19 17:01  技术蛀虫  阅读(518)  评论(0)    收藏  举报