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

1. 灰度线性变换

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

则其中每一个像素点的灰度值为

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

可以得到

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

考虑一个离散的灰度图像

表示灰度

出现的次数, 这样图像中灰度为

的像素出现的概率为:

是图像中所有的灰度数(通常是255) 把对应于

的累积分布函数,定义为:

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

我们创建一个形式为

的变换, 对于原始图像的每一个值它就产生一个

, 这样

的累计概率函数就可以在所有值范围内线性化, 转换公式定义为:

对于常数K,

的性质允许我们做这样的变换, 定义为:

其中

, 注意

将不同的灰度级映射到

, 为了将这些值映射到最初的域, 需要在结果上应用下面的简单变换:

给出部分结果:

Alt text

Alt text

Alt text

给出关键代码:

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

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

[图片上传失败...(image-8c0e8-1537093885389)].png) [图片上传失败...(image-a7d6cf-1537093885389)].png) [图片上传失败...(image-4946e2-1537093885389)].png)

[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),让图像的照明更加均匀,达到增强阴影区细节特征的目的。

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

其中,

是图像,

是为照度分量,

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

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

我们将

定义为

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

其中

是高通滤波器 为了将图像从频域转回时域,我们对

做傅立叶逆转换

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

给出处理结果

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('同态滤波增强后');

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MelonTeam专栏

OpenGL-投影和摄像机

1.OpenGL中的摄像机、视景体、近平面 OpenGL的摄像机和现实世界中的人眼很相似,都有一个三维的坐标表示位置,眼睛的朝向和视野范围,位置和眼睛朝向不同,...

75811
来自专栏专知

【NLP专题】斯坦福CS224n课程笔记03:词向量表示(2)——深入探究词向量

2061
来自专栏数据派THU

各类机器学习问题的最优结果合集!附论文及实现地址索引

来源:中国大数据 本文为你介绍RedditSota 统计的各种机器学习任务的最顶级研究成果(论文)。 该 GitHub 库提供了所有机器学习问题的当前最优结果,...

3916
来自专栏华章科技

良心GitHub项目:各种机器学习任务的顶级结果(论文)汇总

该 GitHub 库提供了所有机器学习问题的当前最优结果,并尽最大努力保证该库是最新的。如果你发现某个问题的当前最优结果已过时或丢失,请作为问题提出来(附带:论...

822
来自专栏深度学习与数据挖掘实战

【今日热门&优质资源】TensorFlow和TF-Slim实现图像分类与分割

1323
来自专栏杨熹的专栏

自己写个 Prisma

Sirajology的视频链接 前一段时间特别火的 Prisma 大家都玩了么,看了这篇文章后,你也可以自己写一个 Prisma 迷你版了。 ? 这个 idea...

3975
来自专栏数据派THU

送你6份最新开源代码!含NLP、ML、计算机视觉方向(附代码和论文)

来源:PaperWeekly 本文长度为636字,建议阅读3分钟 本文为你分享6份最新的开源代码,包括自然语言处理、计算机视觉和机器学习3个方面。 自然语言处理...

2285
来自专栏算法channel

@all: 新浪 机器学习算法岗 面试实录

二面面试官来了。是个算法大佬。是个专门做算法的。直接手出题,他说时间不多,就让我说思路。

1642
来自专栏AI研习社

深度学习的快速目标跟踪

第一部分:CPU real-time tracker ? 终极鲁棒的人脸跟踪 关于跟踪,除了鲁棒性 (robust) 和准确性 (accuracy),这个专...

7487
来自专栏目标检测和深度学习

目标检测入门(四):特征复用、实时性

文章结构 本文的第一部分关注检测模型的头部部分。对与每张图片,深度网络其实是通过级联的映射获得了在某一流形上的一个表征,这个表征相比原图片更有计算机视角下的语义...

4057

扫码关注云+社区

领取腾讯云代金券