MATLAB图像处理之直方图匹配(图像合理增强)

 

先拿结果来看,第一幅是原图  第二幅是直方图均衡化后的图像增强 第三幅是直方图匹配后的处理结果

第二幅  第三幅来看    直接均衡化 会大大增加对比对  但是  有时不符合美观 

%直方图匹配
%直方图均衡有时并不能总取得想要的图像增强结果
%特别的 能够在图片指定位置处进行图像增强是很有用的
%上述这种需求的方法  就是直方图匹配或者 直方图规定化

%通俗讲   直方图匹配是将原图的灰度分布均匀化
%如果想体现某一灰度直方图的图像处理,这就需要直方图匹配
%具体算法例子如下 

%首先直方图均衡
%假设64*64像素的3Bit图像灰度分布如下
%rk                 nk              pk=nk/n
%r0=0             790               0.19  
%r1=1             1023              0.25
%r2=2             850               0.21
%r3=3             656               0.16 
%r4=4             329               0.08
%r5=5             245               0.06
%r6=6             122               0.03
%r7=7             81                0.02
%sk=(L-1)*SUM(pk)直方图均衡化公式 得到映射的下表
%s0=1.33->1 s1=3.08->3 s2=4.55->5 s3=5.67->6
%s4=6.23->6 s5=6.65->7 s6=6.86->7 s7=7.00->7
%均衡化后有5个灰度级了
%r0的790个像素 映射成 s0 取1
%r1的1023个像素 映射成 s1 取3
%r2的850个像素 映射成 s2 取5
%r3的656个像素 映射成 s3 取6
%r4的656个像素 映射成 s4 取6
%r5的245个像素 映射成 s5 取7
%r6的122个像素 映射成 s6 取7
%r7的81个像素  映射成 s7 取7

%其次按章自己规定的直方图分布进行如下计算
%例如自己规定的直方图分布
%z0=0   pz(z0)=0
%z1=1   pz(z1)=0
%z2=2   pz(z2)=0
%z3=3   pz(z3)=0.15
%z4=4   pz(z4)=0.20
%z5=5   pz(z5)=0.30
%z6=6   pz(z6)=0.20
%z7=7   pz(z7)=0.15
%计算变换函数G(zq)=(L-1)SUM(pz(i))  i从1到q
%G(z0)=7*pz(z0)=0 G(z1)=7*(pz(z0)+pz(z1))=0  依次类推
%得到如下变换函数表
%z0=0     G(z0)=0
%z1=1     G(z1)=0
%z2=2     G(z2)=0
%z3=3     G(z3)=1
%z4=4     G(z4)=2
%z5=5     G(z5)=5
%z6=6     G(z6)=6
%z7=7     G(z7)=7
%发现G不是严格单调的  也就是   他有值相等的部分  需要做如下处理
%在G函数中找到最小的值来接近s表中的数  上面所算s表中s0=1 在G表中G(z3)=1
%这是完美的匹配,因此  s到z的映射表如下
%s0=1 对应G(z3) 此时  z=3
%最后得到
%S        Z
%1        3
%3        4
%5        5
%6        6
%7        7
%也就是均衡化8bit图像中, 1的值映射成了3  一次类推


%MATLAB工具箱函数  g=histeq(f,hspec)
%hspec为指定的直方图的分布   g为输出图像   其直方图近似于指定的直方图hspec hspec是一个行向量构成的
%length(hspec)远小于图像f中的灰度级时,图像g的直方图通常会较好的匹配hspec
%https://blog.csdn.net/superjunenaruto/article/details/80037777

clc 
clear
f=imread('D:亮度调节与空间滤波\6.jpg');
subplot(3,3,1)
imshow(f);
subplot(3,3,2)
imhist(f);
xlim('auto')
ylim('auto')
subplot(3,3,4)
[g0 t]=histeq(f,64);%直方图均衡化
imshow(g0)
subplot(3,3,5)
imhist(g0)
xlim('auto')%自动适应x轴的长度
ylim('auto')%自动适应y轴的长度
subplot(3,3,6)
plot(t)

n=0:255;
b=60;
c=70;
nn=exp(-(n-b).^2./(2*c^2));
nn=nn/5;
subplot(3,3,3)
plot(nn)

hspec=nn;
[g1,t]=histeq(f,hspec);%直方图匹配
subplot(3,3,7)
imshow(g1)
subplot(3,3,8)
imhist(g1)
xlim('auto')%自动适应x轴的长度
ylim('auto')%自动适应y轴的长度
subplot(3,3,9)
plot(t)%横坐标代表输入亮度值  纵坐标代表输出灰度值的归一化

结果如下

 

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值