matlab进阶摸索篇——彩色图直方图均衡化

转自:http://blog.csdn.net/abcjennifer/article/details/6667504

首先转为灰度图,然后均衡化,详见代码

[csharp]  view plain  copy
  1. sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');  
  2. [m,n,o]=size(sourcePic);  
  3. grayPic=rgb2gray(sourcePic);  
  4. figure,imshow(sourcePic);  
  5. figure,imshow(grayPic);  
  6.   
  7. gp=zeros(1,256); %计算各灰度出现的概率  
  8. for i=1:256  
  9.     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分量,代码如下:


[html]  view plain  copy
  1. sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');  
  2. [m,n,o]=size(sourcePic);  
  3. figure,imshow(sourcePic,[]);  
  4. %grayPic=rgb2gray(sourcePic);  
  5. grayPic=sourcePic(:,:,1);  
  6.   
  7. gp=zeros(1,256); %计算各灰度出现的概率  
  8. for i=1:256  
  9.     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,[]);  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值