图像增强技术 是一大类基本的图像处理技术 , 其目的是对图像进行加工 , 以得到对具体应用来说视觉效果更 “ 好 ” 、 更 “ 有用 ” 的图像 。
目标: 改善图像视觉效果,便于观察和分析,便于人工或机器对图像的进一步处理。
标准: 相当主观 , 因人而异,没有完全通用的标准,可以有一些相对一致的准则。
图像空域增强
在图像处理中 , 空域 是指由像素组成的空间 , 也就是图像域
空域增强方法指 直接作用于像素改变其特性的增强方法 。 具体的增强操作可仅定义在每个像素位置( (x x, , y y) ) 上 ,此时称为 点操作 ;增强操作还可定义在每个( (x x, , y y) ) 的某个邻域上 , 此时常称为 模板操作或邻域操作。
点处理 是作用于单个像素的空间域处理方法,包括图像灰度变换、直方图处理、伪彩色处理等技术;
模板处理 是作用于像素邻域的处理方法,包括空域 平滑、空域锐化等技术。
图像直接灰度转换
灰度变换也被称为图像的点运算(只针对图像的某一像素点)是所有图像处理技术中最简单的技术,其变换形式如下:
s=T(r)
其中,T是灰度变换函数;r是变换前的灰度;s是变换后的像素。
图像灰度变换的有以下作用:
- 改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸)
- 有选择的突出图 像感兴趣的特征或者抑制图像中不需要的特征
- 可以有效的改变图像的直方图分布,使像素的分布更为均匀
线性灰度变换-截取和分段式(一次函数式)
线性灰度变换函数是一个线性函数:B=f(A)=kA+b.其中A为输入图像灰度值,B为输出图像灰度,a为线性函数的斜率,c为在Y轴的截距。
当a>1时,输入图像的对比度将增大,当a<1时,输出图像的对比度将减小;
当a=1时且c≠0时,c的变换仅使所有的灰度值上移或者下移,其效果使整个图像更暗或更亮,当a<0时暗区域将变亮,亮区域将变暗。这种线性变换可能由于像素达到饱和(小于0或者超过255)从而丢失一部分细节;
特殊情况a=1,c=0输入图像和输出图像相同;a=-1,c=255输出图像的灰度正好反转。
k>1 | 增大图像的对比度,图像的像素值在变换后全部增大,整体效果被增强 |
k=1 | 通过调整b,实现对图像亮度的调整 |
0<k<1 | 图像的对比度被削弱 |
k<0 | 原来图像亮的区域变暗,原来图像暗的区域变亮 |
imadjust
J = imadjust(I)
将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。此用法相当于 imadjust(I,stretchlim(I))
J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。
clc; clearall;closeall; img=imread('pout.tif'); o_img=imadjust(img,[0.30.6],[01]); subplot(1,2,1);imshow(img); subplot(1,2,2);imshow(o_img);
效果
线性灰度变换—图像反转
灰度线性变换最常见的就是图像反转,在灰度图像灰度级范围中,其反转的公式如下所示:
其中,表示原始图像的灰度级,表示变换后的灰度级。
反转法一:
i=imread('reverse.jpg'); %I=im2gray(i); I1=255-i; imshow(I1);
反转法二:
使用函数:
incomplement
调用格式:
IM2 = imcomplement(IM) 函数功能: 对图像数据进行取反运算(实现底片效果)。
参数说明: IM是源图像的数据, IM2是取反后的图像数据。
一个简单的例子:
X=uint8([ 2551075; 44225100]); X2=imcomplement(X) X2=024518021130155
注意点:
- 图像文件中用uint8来表示256级灰度。 对于真彩色位图, 一个像素用3个uint8分别表示该像素的R、G、B分量。
- uint8表示的数据范围: 0~255。图像的底片效果便是拿255 减去原图像数据。
代码:
clc; clearall;closeall; img=imread('../img1.jpg'); o_img=imcomplement(img); subplot(1,2,1);imshow(img); subplot(1,2,2);imshow(o_img);
非线性变换:
图像灰度对数变换一般表示如下所示:
其中,表示原始图像的灰度级,表示变换后的灰度级,为常数。
假设,下图所示的对数曲线的形状表明,改变换将输入中范围较窄的低灰度值映射为输出中较宽范围的灰度值。相反的,对高的输入灰度值也是如此。我们使用这种类型的变换来扩展图像中暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。
对数变换
对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩, 以达到强调图像低灰度部分的目的。增加图片细节。
对数变换的 实质 : 将一幅窄带低灰度输入图像映射为一宽带输出图像
变换方法由下式给出。
底数越大,对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强调高灰度部分,则用反对数函数就可以了。
clc; clearall;closeall; img=imread('../gray1.jpg'); D=double(img); D_1=10*(log(D+1)); o_img=uint8(D_1); subplot(1,2,1);imshow(img);title("原始图像"); subplot(1,2,2);imshow(o_img);title("输出图像");
伽马变换
伽玛变换又称为 指数变换 或 幂次变换,是另一种常用的灰度非线性变换。 图像灰度的伽玛变换一般表示如下所示
其中,表示原始图像的灰度级,表示变换后的灰度级,和正常数
1)当>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分;
2)当<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分;
3)当=1时,该灰度变换是线性的,此时通过线性方式改变原图像。
clc; clearall;closeall; img=imread('../gray1.jpg'); img=rgb2gray(img); img=double(img); C=1; gamma=0.4; o_img1=C*(img.^gamma); gamma=1; o_img2=C*(img.^gamma); gamma=10; o_img3=C*(img.^gamma); img=uint8(img); o_img1=uint8(o_img1); o_img2=uint8(o_img2); o_img3=uint8(o_img3); subplot(2,2,1);imshow(img);title("原始图像"); subplot(2,2,2);imshow(o_img1);title("输出图像gamma=0.4"); subplot(2,2,3);imshow(o_img2);title("输出图像gamma=1"); subplot(2,2,4);imshow(o_img3);title("输出图像gamma=10");