彩色图直方图均衡化 .
首先转为灰度图,然后均衡化
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,[]);
浙公网安备 33010602011771号