图像增强的几个方法以及Matlab代码

1. 灰度线性变换

灰度线性变换, 是一种空域的方法, 直接对每一个像素的灰度值进行操作

假设图像为I

则其中每一个像素点的灰度值为I(x,y)

我们利用简单的线性变换可以得到:

I(x,y)^*=k*I(x,y)+b

k=1,b=16可以得到

Alt text
Alt text
Alt text

这里给出关键代码

original = imread(strcat(strcat('resource\',name),'.bmp'));
transformed = LinearFunction(original, 1, 16);
subplot(1,3,3);
imshow(transformed)
title('线性变换后的图像')
imwrite(transformed,strcat(strcat('result\',name),'(linear).jpg'))

2. 直方图均衡变换

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

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

考虑一个离散的灰度图像\{x\}

n_i表示灰度i出现的次数, 这样图像中灰度为i的像素出现的概率为:

p_x(i)=p(x=i)=\frac{n_i}{n}, 0\leq i<L

L是图像中所有的灰度数(通常是255)

把对应于p_x的累积分布函数,定义为:

cdf_x(i)=\sum_{j=0}^i{p_x(j)}

是图像的累计归一化直方图

我们创建一个形式为y=T(x)的变换, 对于原始图像的每一个值它就产生一个y, 这样y的累计概率函数就可以在所有值范围内线性化, 转换公式定义为:

cdf_y(i)=iK

对于常数K, CDF的性质允许我们做这样的变换, 定义为:

cdf_y(y')=cdf_y(T(k))=cdf_x(k)

其中k\in [0,L), 注意$T$将不同的灰度级映射到(0,1), 为了将这些值映射到最初的域, 需要在结果上应用下面的简单变换:

y' = y*(max\{x\}-min\{x\})+min\{x\}

给出部分结果:

Alt text
Alt text
Alt text

给出关键代码:

m = 255;
subplot(1,3,3);
H = histeq(I,m);
imshow(H,[]);
title('直方图均衡后的图像');

类似地, 我们可以对rgb图像进行直方图均衡, 这里直接给出结果

Alt text
Alt text
Alt text
[M,N,G]=size(I1);
result=zeros(M,N,3);
%获得每一层每一个点的RGB值,并判断其值等于多少
for g=1:3
    A=zeros(1,256);
    %每处理完一层,参数要重新初始化为0
    average=0;
    for k=1:256
        count=0;
        for i=1:M
            for j=1:N
                value=I1(i,j,g);
                if value==k
                    count=count+1;
                end
            end
        end
        count=count/(M*N*1.0);
        average=average+count;
        A(k)=average;
    end
    A=uint8(255.*A+0.5);
    for i=1:M
        for j=1:N
            I1(i,j,g)=A(I1(i,j,g)+0.5);
        end
    end  
end
%展示处理效果
subplot(1,3,3);
imshow(I1);

3. 同态滤波

同态滤波利用去除乘性噪声(multiplicative noise),可以同时增加对比度以及标准化亮度,借此达到图像增强的目的。

一副图像可以表示为其照度(illumination)分量和反射(reflectance)分量的乘积,虽然在时域上这两者是不可分离的,但是经由傅立叶转换两者在频域中可以线性分离。由于照度可视为环境中的照明,相对变化很小,可以看作是图像的低频成分;而反射率相对变化较大,则可视为高频成分。通过分别处理照度和反射率对像元灰度值的影响,通常是借由高通滤波器(high-pass filter),让图像的照明更加均匀,达到增强阴影区细节特征的目的。

做法是:

对于一幅图像, 可以表示成照射分量和反射分量的乘积, 也就是:

m(x,y)=i(x,y)\cdot r(x,y)

其中, m是图像, i是为照度分量, r是反射分量

为了在频域中使用高通滤波器, 我们必须进行傅里叶变换, 但是由于上式是一个乘积式, 不能直接对照度分量和反射分量进行操作, 因此对上式取对数

ln(m(x,y))=ln(i(x,y))+ln(r(x,y))

然后对上式进行傅里叶转换

\mathcal{F}\{ln(m(x,y))\}=\mathcal{F} \{ ln(i(x,y))\}+ \mathcal{F}\{ln(r(x,y))\}

我们将\mathcal{F}\{ln(m(x,y))\}定义为M(u,v)

接下来对图像进行高通滤波, 如此可以使图像的照明更均匀, 高频分量增加且低频分量减少

N(u,v)=H(u,v)\cdot M(u,v)

其中H是高通滤波器

为了将图像从频域转回时域,我们对N做傅立叶逆转换

n(x,y)=\mathcal{F}^{-1}\{N(x,y)\}

最后使用指数函数来复原我们一开始取的对数

m'(x,y)=exp\{n(x,y)\}

给出处理结果

Alt text
Alt text
Alt text

给出部分关键代码

I=double(I);
[M,N]=size(I);
rL=0.5;
rH=4.7;%可根据需要效果调整参数
c=2;
d0=10;
I1=log(I+1);%取对数
FI=fft2(I1);%傅里叶变换
n1=floor(M/2);
n2=floor(N/2);
H = ones(M, N);
for i=1:M
    for j=1:N
        D(i,j)=((i-n1).^2+(j-n2).^2);
        H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波
    end
end
I2=ifft2(H.*FI);%傅里叶逆变换
I3=real(exp(I2));
subplot(1,3,3),imshow(I3,[]);title('同态滤波增强后');

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏悦思悦读

自己动手制作“平均脸”【1】

有趣的“平均脸” 大家想必看到过很多合成的“平均脸”图片吧。 有按国家、民族合成的: ? 也有针对政要明星合成的,例如这张,韩中日三国明星平均脸: ? “平均脸...

7968
来自专栏wym

【OpenCV】HSV颜色识别-HSV基本颜色分量范围

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都...

4451
来自专栏PPV课数据科学社区

使用Python进行描述性统计

【目录】 1 描述性统计是什么? 2 使用NumPy和SciPy进行数值分析   2.1 基本概念   2.2 中心位置(均值、中位数、众数)   2.3 发散...

5427
来自专栏null的专栏

可扩展机器学习——分类——点击率预测(Click-through Rate Prediction)

注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图...

4196
来自专栏大数据挖掘DT机器学习

一元线性回归的细节

文/程sir(简书作者) 原文:http://www.jianshu.com/p/fcd220697182 一元线性回归可以说是数据分析中非常简单的一个知识点,...

3504
来自专栏大数据挖掘DT机器学习

特征选择算法实战

数据挖掘方法的提出,让人们有能力最终认识数据的真正价值,即蕴藏在数据中的信息和知识。数据挖掘 (DataMiriing),指的是从大型数据库或数据仓库中提取人...

3323
来自专栏AI科技评论

KDD 2018 Research Track 最佳学生论文详解:流行音乐的旋律与编曲生成

AI 科技评论消息,KDD 2018 于 2018 年 8 月 19 日至 23 日在英国伦敦举行,开幕式上一系列奖项随之揭晓,由中国科学技术大学、微软人工智能...

1361
来自专栏ATYUN订阅号

让车辆“学会”识别车道:使用计算机视觉进行车道检测

所有人在开车时都要注意识别车道,确保车辆行驶时在车道的限制范围内,保证交通顺畅,并尽量减少与附近车道上其他车辆相撞的几率。对于自动驾驶车辆来说,这是一个关键任务...

6045
来自专栏专知

【干货】对抗自编码器PyTorch手把手实战系列——对抗自编码器学习笔迹风格

即使是非计算机行业, 大家也知道很多有名的神经网络结构, 比如CNN在处理图像上非常厉害, RNN能够建模序列数据. 然而CNN, RNN之类的神经网络结构本身...

4479
来自专栏大数据挖掘DT机器学习

R语言与机器学习(分类算法)朴素贝叶斯算法

前两个算法都被要求做出一个艰难的决定,给出数据所属分类的明确答案,但往往因为分类特征统计不足,或者分类特征选择有误导致了错误的分类结果,哪怕是训练集也有可能出...

4844

扫码关注云+社区

领取腾讯云代金券