matlab进阶摸索篇——彩色图直方图均衡化
2011-08-07 20:09
162 查看
首先转为灰度图,然后均衡化,详见代码
当然,有时候我们不禁想得到一幅图的灰度直方图均衡化结果,而是希望得到彩色图均衡化结果,那么就需要先将彩色图分为RGB分量,代码如下:
sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg'); [m,n,o]=size(sourcePic); grayPic=rgb2gray(sourcePic); figure,imshow(sourcePic); figure,imshow(grayPic); gp=zeros(1,256); %计算各灰度出现的概率 for i=1:256 gp(i)=length(find(grayPic==(i-1)))/(m*n); end figure,bar(0:255,gp); title('原图像直方图'); xlabel('灰度值'); ylabel('出现概率'); newGp=zeros(1,256); %计算新的各灰度出现的概率 S1=zeros(1,256); S2=zeros(1,256); tmp=0; for i=1:256 tmp=tmp+gp(i); S1(i)=tmp; S2(i)=round(S1(i)*256); end for i=1:256 newGp(i)=sum(gp(find(S2==i))); end figure,bar(0:255,newGp); title('均衡化后的直方图'); xlabel('灰度值'); ylabel('出现概率'); newGrayPic=grayPic; %填充各像素点新的灰度值 for i=1:256 newGrayPic(find(grayPic==(i-1)))=S2(i); end figure,imshow(newGrayPic);
当然,有时候我们不禁想得到一幅图的灰度直方图均衡化结果,而是希望得到彩色图均衡化结果,那么就需要先将彩色图分为RGB分量,代码如下:
sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg'); [m,n,o]=size(sourcePic); figure,imshow(sourcePic,[]); %grayPic=rgb2gray(sourcePic); grayPic=sourcePic(:,:,1); gp=zeros(1,256); %计算各灰度出现的概率 for i=1:256 gp(i)=length(find(grayPic==(i-1)))/(m*n); end newGp=zeros(1,256); %计算新的各灰度出现的概率 S1=zeros(1,256); S2=zeros(1,256); tmp=0; for i=1:256 tmp=tmp+gp(i); S1(i)=tmp; S2(i)=round(S1(i)*256); end for i=1:256 newGp(i)=sum(gp(find(S2==i))); end newGrayPic=grayPic; %填充各像素点新的灰度值 for i=1:256 newGrayPic(find(grayPic==(i-1)))=S2(i); end nr=newGrayPic; grayPic=sourcePic(:,:,2); gp=zeros(1,256); %计算各灰度出现的概率 for i=1:256 gp(i)=length(find(grayPic==(i-1)))/(m*n); end newGp=zeros(1,256); %计算新的各灰度出现的概率 S1=zeros(1,256); S2=zeros(1,256); tmp=0; for i=1:256 tmp=tmp+gp(i); S1(i)=tmp; S2(i)=round(S1(i)*256); end for i=1:256 newGp(i)=sum(gp(find(S2==i))); end newGrayPic=grayPic; %填充各像素点新的灰度值 for i=1:256 newGrayPic(find(grayPic==(i-1)))=S2(i); end ng=newGrayPic; grayPic=sourcePic(:,:,3); gp=zeros(1,256); %计算各灰度出现的概率 for i=1:256 gp(i)=length(find(grayPic==(i-1)))/(m*n); end newGp=zeros(1,256); %计算新的各灰度出现的概率 S1=zeros(1,256); S2=zeros(1,256); tmp=0; for i=1:256 tmp=tmp+gp(i); S1(i)=tmp; S2(i)=round(S1(i)*256); end for i=1:256 newGp(i)=sum(gp(find(S2==i))); end newGrayPic=grayPic; %填充各像素点新的灰度值 for i=1:256 newGrayPic(find(grayPic==(i-1)))=S2(i); end nb=newGrayPic; res=cat(3,nr,ng,nb); figure,imshow(res,[]);
相关文章推荐
- matlab进阶摸索篇——彩色图直方图均衡化
- matlab进阶摸索篇——彩色图求直方图
- matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性
- Matlab——彩色图像的拼接
- RGB到HSV的彩色空间变化 Matlab
- 详解图像直方图均衡化原理,附自己写的在MATLAB下写的直方图均衡化源码,目的与OpenCV算法统一!
- 【OpenCV入门指南】第十篇 彩色直方图均衡化
- (7)MATLAB彩色图像处理
- 彩色图像直方图均衡化 --- 基于OpenCV中EqualizeHist_Demo实现
- MATLAB - 练习程序,直方图均衡化
- 彩色图像的直方图均衡化--基于OpenCV中EqualizeHist_Demo实现
- matlab RGB到HSI的彩色转换及实现
- matlab实现将彩色图像转换成灰色图像的方法
- MATLAB学习笔记 彩色图像处理
- MATLAB中将彩色的图像转化为灰度图像
- RGB到HSV的彩色空间变化 Matlab
- 【matlab】直方图均衡化
- 用matlab实现视频的空间滤波和直方图均衡化
- matlab 直方图均衡化(含rgb)
- 【OpenCV入门指南】第十篇 彩色直方图均衡化