700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 彩色图像直方图均衡化

彩色图像直方图均衡化

时间:2019-12-15 05:42:42

相关推荐

彩色图像直方图均衡化

Question:

目标 请载入你的输入图像(RGB 模式),完成:1. (6 分)请用你在 HW2 中实现的“equalize_hist”函数,分别对 R、G、B 三个通道进行直方图均衡化,将处理后的三通道重构成一张 RGB 图,并将这张 RGB 图贴在你的报告中。2. (6 分)分别计算图片每一个通道的直方图,并对这三个直方图取平均值得到一个平均直方图,对这个平均直方图做均衡化。现在把平均直方图均衡化前后的像素值映射关系应用到 R、G、B 三个通道,再重构一张 RGB 图。请将这张 RGB 图贴在你的报告中。3. (6 分)将输入图片转换到 HSI 色彩空间,对强度(intensity)通道进行直方图均衡化。将处理后的结果转换到 RGB 色彩空间,并把这张 RGB 图片贴在你的报告里。4. (12 分)比较上面得到的三个结果,请说出它们的不同之处并解释其中的原因。

Answer:

function equalize_hist(I) if isstr(I)img = imread(I);endfigure subplot(221) imshow(img)axis ontitle(['原图像']);[M,N,D] = size(img);new = zeros(M,N); %%创建新图像temp1 = img(:,:,1);%统计像素灰度 rNumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目for i = 1:M for j = 1: N rNumPixel(temp1(i,j) + 1) = rNumPixel(temp1(i,j) + 1) + 1; end end %计算PDA PDA = zeros(1,256); for i = 1:256 PDA(i) = rNumPixel(i) / (M * N * 1.0); end %计算CDA CDA = zeros(1,256); for i = 1:256 if i == 1 CDA(i) = PDA(i); else CDA(i) = CDA(i - 1) + PDA(i); end end %将CDA乘上最大灰度255并且向上取整 CDA = uint8(255 .* CDA + 0.5); %将原图像各个位置灰度值映射到新值 for i = 1:M for j = 1: N new(i,j) = CDA(temp1(i,j)+1); end end new = uint8(new);r = new;temp2 = img(:,:,2);%统计像素灰度 gNumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目for i = 1:M for j = 1: N gNumPixel(temp2(i,j) + 1) = gNumPixel(temp2(i,j) + 1) + 1; end end %计算PDA PDA = zeros(1,256); for i = 1:256 PDA(i) = gNumPixel(i) / (M * N * 1.0); end %计算CDA CDA = zeros(1,256); for i = 1:256 if i == 1 CDA(i) = PDA(i); else CDA(i) = CDA(i - 1) + PDA(i); end end %将CDA乘上最大灰度255并且向上取整 CDA = uint8(255 .* CDA + 0.5); %将原图像各个位置灰度值映射到新值 for i = 1:M for j = 1: N new(i,j) = CDA(temp2(i,j)+1); end end new = uint8(new);g = new;temp3 = img(:,:,3);%统计像素灰度 bNumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目for i = 1:M for j = 1: N bNumPixel(temp3(i,j) + 1) = bNumPixel(temp3(i,j) + 1) + 1; end end %计算PDA PDA = zeros(1,256); for i = 1:256 PDA(i) = bNumPixel(i) / (M * N * 1.0); end %计算CDA CDA = zeros(1,256); for i = 1:256 if i == 1 CDA(i) = PDA(i); else CDA(i) = CDA(i - 1) + PDA(i); end end %将CDA乘上最大灰度255并且向上取整 CDA = uint8(255 .* CDA + 0.5); %将原图像各个位置灰度值映射到新值 for i = 1:M for j = 1: N new(i,j) = CDA(temp3(i,j)+1); end end new = uint8(new);b = new;output1 = cat(3,r,g,b);subplot(222)imshow(output1)axis ontitle(['均衡化图像']);averageNumPixel = zeros(1,256);for i = 1:256averageNumPixel(i) = (rNumPixel(i) + gNumPixel(i) + bNumPixel(i))/3;end%计算PDA PDA = zeros(1,256); for i = 1:256 PDA(i) = averageNumPixel(i) / (M * N * 1.0); end %计算CDA CDA = zeros(1,256); for i = 1:256 if i == 1 CDA(i) = PDA(i); else CDA(i) = CDA(i - 1) + PDA(i); end end %将CDA乘上最大灰度255并且向上取整 CDA = uint8(255 .* CDA + 0.5);%将原图像各个位置灰度值映射到新值 for i = 1:Mfor j = 1:Nnew1(i,j) = CDA(temp1(i,j)+1); endendnew1 = uint8(new1);for i = 1:Mfor j = 1:Nnew2(i,j) = CDA(temp2(i,j)+1); endendnew2 = uint8(new2);for i = 1:Mfor j = 1:Nnew3(i,j) = CDA(temp3(i,j)+1); endendnew3 = uint8(new3);output2 = cat(3,new1,new2,new3);figureimshow(output2)%提取单通道分量img=double(img);r=img(:,:,1);g=img(:,:,2);b=img(:,:,3);%实现转换angle=acos(0.5*((r-g)+(r-b))./(sqrt((r-g).^2+(r-b).*(g-b))));if (b>g)H = 2*pi-angle;elseH = angle;endH=H/(2*pi);S=1-3.*(min(min(r,g),b))./(r+g+b);H(S==0)=0;I=(r+g+b)/3;I=uint8(I);%统计像素灰度 INumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目for i = 1:M for j = 1: N INumPixel(I(i,j) + 1) = INumPixel(I(i,j) + 1) + 1; end end %计算PDA PDA = zeros(1,256); for i = 1:256 PDA(i) = INumPixel(i) / (M * N * 1.0); end %计算CDA CDA = zeros(1,256); for i = 1:256 if i == 1 CDA(i) = PDA(i); else CDA(i) = CDA(i - 1) + PDA(i); end end %将CDA乘上最大灰度255并且向上取整 CDA = uint8(255 .* CDA + 0.5); %将原图像各个位置灰度值映射到新值 for i = 1:M for j = 1: N Inew(i,j) = CDA(I(i,j)+1); end endI=Inew;H=H*2*pi;I=double(I);S=double(S);H=double(H);[m,n]=size(H);%转换for i = 1:mfor j = 1:nif (0<=H(i,j))&(H(i,j)<2*pi/3)B(i,j)=I(i,j).*(1-S(i,j));R(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j))./cos(pi/3-H(i,j)));G(i,j)=3*I(i,j)-(R(i,j)+B(i,j));endif (2*pi/3<=H(i,j))&(H(i,j)<4*pi/3)H(i,j)=H(i,j)-2*pi/3;R(i,j)=I(i,j).*(1-S(i,j));G(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-2*pi/3)./cos(pi-H(i,j)));B(i,j)=3*I(i,j)-(R(i,j)+G(i,j));endif (4*pi/3<=H(i,j))& (H(i,j)<2*pi)H(i,j)=H(i,j)-4*pi/3;G(i,j)=I(i,j).*(1-S(i,j));B(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-4*pi/3)./cos(5*pi/3-H(i,j)));R(i,j)=3*I(i,j)-(G(i,j)+B(i,j));endendendoutput3=cat(3,R,G,B);output3=uint8(output3);figureimshow(output3)

Comparison of results:

第一种方法是分别对 R、G、B 三个通道进行直方图均衡化,然后将处理后的三通道重构成一张 RGB 图;第二种方法是对 R、G、B 三个通道直方图取平均值得到一个平均直方图,对这个平均直方图做均衡化再分别映射到 R、G、B 三个通道,再重构一张 RGB 图;第三种方法是将输入图片先转换到 HSI 色彩空间,对强度通道进行直方图均衡化,再将处理后的结果转换到 RGB 色彩空间。前两种方法类似,都是在 RGB 彩色空间内完成直方图均衡化的,根据图示结果可以看到虽然的确有将原图中的阴暗部分变得明亮起来,但是颜色的失真也是比较严重的。在均衡化过程中不仅改变了亮度,也改变了彩色,产生了不正确的彩色。通过第三种在 HSI 彩色空间均衡化方法得到的结果图像效果是比较好的,整个图像都有效的加亮了,而彩色本身(色调)是不变的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。