2020-10-20

it2023-07-13  65

项目场景:MATLAB图像均衡

问题描述:

影响图像的视觉效果的一个重要的因素就是图像的对比度,如果图像的对比度很小,表现在直方图当中就是灰度值偏向一侧,对比度小,就会使得图像看起来要么很暗要么很亮。直方图均衡的本质是灰度值映射。而映射函数可以由分布曲线(累积直方图)得到。提高图像对比度的变换函数f(x)需要满足一下条件:f(x)在0<=x<=L−1上单调递增(不要求严格单调递增),其中L表示灰度级(L=256),f(x)的范围是[0,L−1]。图像直方图完全均匀分布的时候,此时图像的熵是最大的(随机变量每个值的概率都相同时,概率最大),图像对比度是最大的。有一个重要的函数,能够满足上面的条件:

px(x)表示概率密度函数,在离散的图像中,表示直方图的每个灰度级的概率。可以使用求和代替积分,差分代替微分,所以上述的变换函数就是: 例如均衡前后直方图为:

srcImageHit=imread('E:\DigitalImage\直方图\TestImageHit.jpg');%需要均衡处理的图像 subplot(2,3,1); imshow(srcImageHit); title('原图'); [MH,NH,CH]=size(srcImageHit);%获取图像参数 frqImage=zeros(3,256); grayValue=0:1:255; for rgb=1:3 for i=1:MH for j=1:NH for num=1:256 if(srcImageHit(i,j,rgb)==num-1) frqImage(rgb,num)=frqImage(rgb,num)+1; break; end end end end end frqImage=frqImage/MH/NH; subplot(2,3,2); bar(grayValue,frqImage(1,:)); xlim([0,255]); title('原图R通道灰度直方图'); subplot(2,3,3); bar(grayValue,frqImage(2,:)); xlim([0,255]); title('原图G通道灰度直方图'); subplot(2,3,5); bar(grayValue,frqImage(3,:)); xlim([0,255]); title('原图B通道灰度直方图'); figure; %图像均衡化处理 s = zeros(3,256); for rgb=1:3 for i = 1:256 for j = 1:i s(rgb,i) = s(rgb,i)+255*frqImage(rgb,j); end end s(rgb,:) = uint8(s(rgb,:)); for i = 1:MH for j = 1:NH for k = 1:256 if srcImageHit(i,j,rgb) == k-1 srcImageHit(i,j,rgb) = s(rgb,k); break; end end end end end subplot(2,3,1); imshow(srcImageHit); title('均衡化后的图像'); imwrite(srcImageHit,'E:\DigitalImage\直方图\JTestImageHit.jpg'); frqImage=zeros(3,256); grayValue=0:1:255; for rgb=1:3 for i=1:MH for j=1:NH for num=1:256 if(srcImageHit(i,j,rgb)==num-1) frqImage(rgb,num)=frqImage(rgb,num)+1; break; end end end end end frqImage=frqImage/MH/NH; subplot(2,3,2); bar(grayValue,frqImage(1,:)); xlim([0,255]); title('均衡图R通道灰度直方图'); subplot(2,3,3); bar(grayValue,frqImage(2,:)); xlim([0,255]); title('均衡图G通道灰度直方图'); subplot(2,3,5); bar(grayValue,frqImage(3,:)); xlim([0,255]); title('均衡图B通道灰度直方图');

实验结果:


注:本次程序代码中直方图的绘制,图像二值化方法等部分的内容可以调用matlab相关函数,由于该部分代码由我自己编写,所以代码相对冗杂,大家只需要了解其数学算法原理即可。**

最新回复(0)