直方图均衡

Posted by Cata on September 3, 2019

@直方图均衡

定义

直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

例子

具体要求如下: 假定有64×64大小的图像,灰度分16级,概率分布如下表所示,试用直方图均衡的方法处理之。

原直方图 附:源代码

解答

环境

编程语言:Matlab 2018b 语言:Matlab

处理直方图的步骤

直方图输入->计算概率->计算累加概率->计算均衡后的灰度级->输出灰度级直方图

步骤

(1).直方图输入

clc
count=[800,650,600,430,300,230,200,170,150,130,110,96,80,70,50,30];
N=4096;
x=16;
figure(1);
hold on;
bar(count) 
OUT1=zeros(1,x);

(2)计算概率

PDF=count/N;%PDF±íʾÿ¸ö»Òȼ¶±ð³öÏֵĸÅÂÊ£¬Ò»¹²ÓÐ256ÐÐ

(3)计算累加概率:

CDF=cumsum(PDF);%CDF±íʾÖðÐÐÏà¼ÓµÄ¸ÅÂÊ£¬Ò²¾ÍÊÇÀÛ¼Ó¸ÅÂÊ

(4)计算均衡后的灰度级:

for i=1:x
    for j=1:count(i)
        %d=round(CDF(i)*x-1);
        OUT1(round(CDF(i)*x-1))=OUT1(round(CDF(i)*x-1))+1;
    end
end

(5).输出灰度级直方图

figure(2);
hold on;
bar(OUT1

实验结果

原始图像的直方图 原始图像的直方图

均衡后的直方图: 均衡后的直方图

图像的直方图均衡化

代码

使用基本的图像读取方法和写入方法,编写matlab代码如下:

clear all;
clc;
close all;
 
f=imread('1.jpg');

[m,n,d]=size(f);%灰度图1维彩色图3维

if d==1
    f1=f;%复制后新的图片f1作为改变后的图片
elseif d==3
    f=rgb2gray(f);
    f1=f;
end

figure
imhist(f)

[count,x]=imhist(f);%count表示每个灰度级别有多少个像素x表示有多少个灰度级别

PDF=count/(m*n);%PDF表示每个灰度级别出现的概率一共有256行

CDF=cumsum(PDF);%CDF表示逐行相加的概率也就是累加概率
 
for i=1:256
    xiangsuxushu=find(f==i);%原本灰度级别为i的像素在第几位
    changdu=length(xiangsuxushu);
    for j=1:changdu
        f1(xiangsuxushu(j))=round(CDF(i)*256-1);%每一个原本灰度级别为i的像素
                                              %灰度级别改为累加出现概率*256
                                              %再取整
    end
end
 
figure
imhist(f1)
figure
subplot(1,2,1);
imshow(f)
subplot(1,2,2);
imshow(f1)

结果

  1. 原始直方图:  原始直方图
  2. 均衡化后的直方图: 均衡化后的直方图
  3. 图片对比: 图片对比 可见,直方图均衡化使灰度被拉开。

    MATLAB自带的直方图处理工具

    代码

    可使用函数histeq()进行直方图均衡化处理: ```javascript close all; clc; %函数histeq()进行直方图均衡化处理

I=imread(‘40.png’);

J=histeq(I); %直方图均衡化

figure, subplot(121),imshow(uint8(I)); title(‘原图’)

subplot(122),imshow(uint8(J)); title(‘均衡化后’) figure,

subplot(121),imhist(I,64); title(‘原图像直方图’);

subplot(122),imhist(J,64); title(‘均衡化后的直方图’);

```

结果

  1. 直方图对比: 直方图对比:

  2. 图片对比: 图片对比

    总结

    直方图均衡即是直方图灰度自动匹配的过程,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。即将某幅影像或某一区域的直方图匹配到另一幅影像上。使两幅影像的色调保持一致。可以在单波段影像直方图之间进行匹配,也可以对多波段影像进行同时匹配。两幅图像比对前,通常要使其直方图形式一致。