图像增强的概念及分类

概念:通过对图像的各种加工,获得视觉效果更好,或看起来更有用的图像。突出有用信息,增强后的图像不要求保真。
分类:空域增强、频率增强、彩色增强
空域增强的方法:空域(灰度)变换、空域滤波

在这里插入图片描述

灰度变换

1.灰度级映射

变换中对每一点作处理,每一个灰度值映射到另一灰度值

g(x, y) = T [ f(x, y) ]

1.常用的映射
1.1图像求反

g(x,y) = (L-1)– f(x,y)

在这里插入图片描述

目的:灰度值反向,即黑变白,白变黑

1.2增强对比度

采用分段形式,小于f1的灰度范围压缩,f1到f2之间灰度范围增加(增强对比度),大于f2的灰度范围压缩

在这里插入图片描述

代码实现:

%对I进行灰度线性变换 [low_in high_in]为需要变换的灰度级范围 变换时采用imdouble型
J = imadjust(I,[low_in high_in],[low_out high_out])

I=imread('cat.png');
I=rgb2gray(I);
I=im2double(I);

%做出经过灰度线性变换和未经过灰度线性变换的直方图
subplot(221);
hist(I);
title('orignal')
%进行灰度线性变换
I0=imadjust(I,[0.2,0.8]);
subplot(222);
hist(I0);
title('operated')

%做出经过变换后的图像
subplot(223);
imshow(I);
subplot(224);
imshow(I0);

结果:

在这里插入图片描述

1.将[0.2,0.8]范围的灰度级映射到[0,1],可以发现亮度提高,但是原图像中高亮度区域信息丢失
2.与直方图对应,可以发现原图中[0.8,1]的部分全部映射到1处

在这里插入图片描述

1.采用默认参数则默认将灰度级存在的范围映射到[0,1],上图可以发现是从[0.4,1]映射到[0,1]

1.3对数变换

借助对数变换实现动态范围压缩,低灰度区域拓展(黑),高灰度区域(白)压缩,体现就是原黑色区域对比度增强。
还有一个应用就是压缩动态范围,频谱分析时可能需要使用,防止丢失细节。

g(x, y) = a + blog[ f (x, y) +1]

在这里插入图片描述

1.4幂次(伽马)变换

γ<1:拓展低亮度区,压缩高亮度区
γ>1:压缩低亮度区,拓展高亮度区
γ=1:图像无变化

在这里插入图片描述

代码实现:

%和灰度线性变化用的是同一个函数,这里多了一个gamma参数
J = imadjust(I,[low_in high_in],[low_out high_out],gamma)

I=imread('view.png');
I=rgb2gray(I);
I=im2double(I);

%做出原始图像
subplot(221);
imshow(I);
title('orignal');

%参数为3的伽马变换
subplot(222);
I0=imadjust(I,[],[],3);
imshow(I0);
title('gamma 3');

%参数为4的伽马变换
subplot(223);
I1=imadjust(I,[],[],4);
imshow(I1);
title('gamma 4');

%参数为5的伽马变换
subplot(224);
I2=imadjust(I,[],[],5);
imshow(I2);
title('gamma 5');

结果:

在这里插入图片描述

1.可以发现,当作gamma>1的变换时,起到的是扩展亮度区域的作用
2.直方图均衡化

目的:借助直方图实现灰度映射

1.直方图概念

数字图像中每一灰度级与其出现的频度之间的关系,类似概率密度函数。

在这里插入图片描述

其中,N表示像素点的总数,nk表示灰度大小为fk的像素点的总数,相除即得灰度大小为fk出现的概率值
注:直方图是统计概念,每个图像都有一个直方图,但相同的直方图可以有完全不同的图像(像素的分布位置不同)

2.直方图分析

1.对于暗色图像,其直方图集中在灰度级低的一侧。
2.对于明亮图像,其直方图集中在灰度级高的一侧。

在这里插入图片描述

如果一幅图像的像素占有尽可能多的灰度级并且分布均匀,则这样的图像有高对比度和多变的灰度色调。

3.直方图均衡化

目的:拉伸原始直方图,使其变换为均匀形式,使图像的熵最大,图像包含的平均信息量最大。
即使用一个灰度映射函数,能够使变换后的图像的直方图达到均匀的状态。
累计分布函数(CDF,类似于概率分布函数)能完成此功能。

在这里插入图片描述

注:
1.可以证明,对于连续情况,使用累计分布函数进行灰度映射得到的图像,其直方图为均匀的,但由于数字图像的离散性,故得到的图像的直方图并不是完全均匀的。
2.但是,数字图像的直方图均衡化具有展开输入图像直方图的趋势,均衡后的图像的灰度级跨越更宽灰度级范围,即增强了对比度。
3.定性的理解,对于灰度级大量分布的范围(灰度级坐标),其累计分布函数在该范围斜率大,结果就是拓展该范围的灰度级。
代码实现:

%基于向量 x 中的元素创建直方图条形图 x要为double型
hist(x)

%直方图均衡化
B=histeq(A0);

A=imread('woman.png');
A0=rgb2gray(A);
A1=double(A0);

%直方图均衡化
B=histeq(A0);
B=double(B);

%作出均衡化后的直方图
subplot(2,2,1);
hist(B)
title('hist operated');

%作出均衡化前的直方图
subplot(2,2,2);
hist(A1)
title('hist original');

%作出均衡化后的图
subplot(2,2,3);
imshow(B,[]);
title('operated');

%作出均衡化之前的图
subplot(2,2,4);
imshow(A0,[]);
title('orignal');

结果:

在这里插入图片描述

1.可以发现,经过直方图均衡化的图像对比度增强且其直方图的灰度级明显拓展。

3.直方图规定化

目的:直方图均衡化可以自动增强整个图像对比度,但增强效果不容易控制。实际中有时需要把直方图换成规定形式。

图像间算术与逻辑运算

1.算术运算

1.图像的相加(平均)运算

目的:消除噪声
原理:图像噪声不相关,随着叠加图像增加,噪声在每个像素的影响逐步减小

2.图像相减运算

目的:图像差异,边缘检测,运动目标信息检测等

2.逻辑运算

与、或、非、异或

空间滤波

1.概述

空间模板邻域操作

分类

按特点:线性、非线性
按功能:
平滑:模糊、消除噪声;减弱或消除傅里叶高频分量
锐化:增强细节、边缘;减弱或消除傅里叶低频分量

在这里插入图片描述

2.滤波器机理

在待处理图像中逐点地移动掩模。在每一点 (x,y)处,滤波器在该点的响应通过事先义的关系来计算 。对于线性空间滤波其响应由滤波器系数与滤波掩模扫过区域的相应像索值的乘积之和给出:

在这里插入图片描述

注:
冈萨雷斯的书中定义此操作为相关,其他的一些参考资料则定义为卷积

3.平滑滤波

1.线性平滑滤波器

原理:
线性平滑滤波器的输出(响应)是包含在滤波器模板邻域内的像素的简单平均值,可以将其归入低通滤波器中。
目的:
降低噪声、模糊处理
常用模板:

在这里插入图片描述

代码实现:

%用多维过滤器h过滤多维数组A,并返回结果B options为形参,对应的是滤波的方法(相关或卷积)
B = imfilter(A,h,options,...)

%根据矩阵 H 中的系数,对数据矩阵 X 应用有限脉冲响应滤波器
Y = filter2(H,X)

I=imread('children.png');
I=rgb2gray(I);

%显示原始图像
subplot(121);
imshow(I);
title('original');

%显示滤波后的图像 注意滤波后double要转换为uint8型
subplot(122);
%建立系数矩阵
H=ones(3)./9;
%I0=filter2(H,I,'full');
I0=imfilter(I,H,'corr');
I0=uint8(I0);
imshow(I0)
title('operated');

结果:

在这里插入图片描述

1.可以发现,线性滤波后的图像明显模糊化。

2.非线性中值滤波器

原理:
它的响应基于图像滤波器包围的图像区域中像素的排序,然后由统计结果决定的值代替中心像素的值。(采用的是中间值)
目的:消除椒盐噪声

代码实现:

I=imread('children.png');
I=rgb2gray(I);

subplot(121);
%加入椒盐噪声
I0=imnoise(I,'salt & pepper'); 
imshow(I0);
title('with noise');

subplot(122);
%进行中值滤波 选定3*3的邻域
I1=medfilt2(I0,[3,3]);
subplot(122);
imshow(I1);
title('with median filter');

结果:

在这里插入图片描述

1.中值滤波能够较好地滤去椒盐噪声,但会模糊原图像,且设置的邻域越大,模糊度越高。

4.锐化滤波

目的:突出灰度的过渡部分

1.线性锐化滤波器

拉普拉斯算子实现锐化
原理:其应用强调的是图像中灰度的突变,并不强调灰度级缓慢变化的区域
注:
1.如果使用的定义具有负的中心系数,那么必须将原图像减去经拉普拉斯变换后的图像
2.如果使用的定义具有正的中心系数,那么必须将原图像加上经拉普拉斯变换后的图像
这样才能得到增强的图像
模板:
在这里插入图片描述

此时原图像应该加上经拉普拉斯变换后的图像。

锐化滤波器的效果也可以用原始图减去平滑图(低通)得到,故高平提升滤波器可表示为:

High boost = AxOriginal – Low pass = (A-1)xOriginal + High passA=1 普通高通滤波,A>1 高频+原图

代码实现:

I=imread('children.png');
I=rgb2gray(I);

%作出原始图像
subplot(221);
imshow(I);
title('original');

%锐化滤波矩阵
H=[-1 -1 -1;-1 8 -1;-1 -1 -1];
%经过锐化滤波后的图像
I0=imfilter(I,H,'corr');
subplot(222);
imshow(I0);
title('sharpen');

%(1*原图+1*高频)/2
I1=(I0+I)/2;
subplot(223);
imshow(I1);
title('sharpend+original');

%(10*原图+1*高频)/11 先转换为double再转换为uint8,防止溢出
I2=(double(I0)+10*double(I))/11;
I2=uint8(I2);
subplot(224);
imshow(I2);
title('sharpend+10*original');

结果:

在这里插入图片描述

1.利用锐化滤波器可以提取出边缘信息,但是使用了-H和H没有区别,都是原图像加上经过拉普拉斯变换的图像。。。

利用原图-经过低通滤波后的图像同样可以得到边缘轮廓:

H2=(1/25)*ones(5);
%经过锐化滤波后的图像
I0=imfilter(I,H2,'corr');
for i=1:10
    I0=imfilter(I0,H2,'corr');
end
I4=I-I0;
subplot(222);
imshow(I4);
title('sharpen');

在这里插入图片描述