前面已经说了,数字图像处理是指通过计算机对数字图像进行去除噪声、增强、复原、切割、提取特征等处理的方法和技术。
其主要目的有三个方面:
- 提高图像的视感质量。如进行图像的亮度、彩色变换,增强、抑制某些成分,对图像进行几何变换等,以改善图像的质量。
- 图像数据的变换、编码和压缩,以便于图像的存储和传输。
- 提取图像中所包括的某些特征或特殊信息,这些被提取的特征或信息往往为计算机分析图像提供便利。提取特征或信息的过程是模式识别或计算机视觉的预处理。提取的特征能够包括非常多方面,如频域特征、灰度或颜色特征、边界特征、区域特征、纹理特征、形状特征、拓扑特征和关系结构等。
图像增强(增强图像中的实用信息)
- 图像增强是指对图像的某些特征,如边缘、轮廓、对照度等进行强调或锐化,以便于显示、观察或进一步分析与处理
- 增强的首要目标是使处理后的图像比原始图像更适合于特定应用。
- 主要方法:
- 空间域:
- 点运算(灰度变换、直方图修正法)
- 区域运算(空间滤波)
- 频域:
- 高通滤波、 低通滤波、中值滤波;
- 空间域:
灰度变换(gray-scale transformation, GST)是一种空间域上的点运算处理方法。依据一定的关系,逐点改变原图像中每个像素灰度值的方法(且仅仅跟该点原来的灰度值有关),其表示形式例如以下:
- 对于输入图象f(x,y),输出图像g(x,y),T(in)为灰度变换函数。则g(x,y)=T( f(x,y) )。
其主要目的例如以下:
- 改善画质。使图像显示效果更加清晰
- 有选择性地突出图像中感兴趣的特征或抑制某些不须要的特征,使图像与视觉响应特征相匹配(图像增强)
其主要应用例如以下:
- 图像求反
- 对照度拉伸
- 图像灰度切割(二值化)
图像求反:
这样的方法适用于增强嵌入图像暗色区域的白色或灰色细节。
src = imread('Fig0303(a)(breast).tif'); imshow(src); result = imadjust(src, [0 1], [1 0]); figure, imshow(result);
对照度拉伸:
(普通线性变换)
src = imread('Fig0316(a)(moon).tif'); imshow(src); result = imadjust(src, stretchlim(src), [ ]); figure, imshow(result);
(使用对数变换)
src = imread('Fig0305(a)(spectrum).tif'); imshow(src); result = im2uint8( mat2gray( log(1 + double(src)) ) ); figure, imshow(result);
图像灰度切割(二值化):
在图像处理领域,二值图像运算量小,而且可以体现图像的关键特征,因此被广泛使用。
src = imread('Fig0409(a)(bld).tif'); imshow(src); [row clumn] = size(src); for p = 1:row for q = 1:clumn if src(p,q)>=125 src(p,q)=255; else src(p,q)=0; end end end figure,imshow(src);
- MATLAB函数小结:
imadjust()
imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵),该函数先将图像映射到[0 1],比如uint8类型的图像会先乘以255来决定实际应用中的值。调用格式: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。此映射偏重更低数值(灰暗)输出。假设省略此參数,默觉得(线性映射)。
newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)调整索引色图像的调色板map。假设low_in, high_in, low_out, high_out 和 gamma 都是标量。那么对 r,g。b 分量同一时候都做此映射。
对于每一个颜色分量都有唯一的映射,当 low_in 和 high_in 同一时候为1*3向量或者 low_out 和 high_out 同一时候为1*3向量或者 gamma 为1*3向量时。
调整后的颜色矩阵 newmap
和 map 有同样的大小。
RGB2 = imadjust(RGB1,...)对 RGB 图像RGB1 的红、绿、蓝调色板分别进行调整。 随着颜色矩阵的调整,每个调色板都有唯一的映射值。
stretchlim()
LOW_HIGH = stretchlim(src, tol)该函数找到对照度扩展图像的对照,可用于imadjust(),tol = [LOW_FRACT HIGH_FRACT] 指定图像低像素值和高像素值饱和度的百分比假设tol是一个标量,tol = LOW_FRACT、HIGH_FRACT = 1 - LOW_FRACT,饱和度等于低像素值和高像素值的百分比。假设在參数中忽略toll。那么饱和度水平为2%,tol的默认值为[0.01 0.99]。假设选择tol = 0, LOW_HIGH = [min(I(:)); max(I(:))].
mat2gray()
调用格式:I = mat2gray(A, [amin amax])将图像矩阵A中介于amin和amax的数据归一化处理。 其余小于amin的元素都变为0。 大于amax的元素都变为1。I = (A-amin)/(amax-amin)
I = mat2gray(A)将图像矩阵A归一化为图像矩阵I。 归一化后矩阵中每一个元素的值都在0到1范围内(包含0和1)。I = (A-amin)/(amax-amin)
im2uint8()
函数功能: 把图像数据类型转换为无符号八位整型。假设输入图像是无符号八位整型的,返回的图像和源图像同样。假设源图像不是无符号八位整型的,该函数将返回和源图像同样但数据类型为uint8的图像(必要时对图像进行调整)。调用格式:I = im2uint8(src)把灰度图像src的数据类型转换成无符号八位整型的后, 返回。(但src并不发生改变)
RGB2 = im2uint8(RGB1)把真彩色图像的数据类型转换成无符号八位整型的。 并返回。注意这里并非将真彩色图像转换成为黑白图像, 这里只改变了图像数据的类型。
I = im2uint8(BW)把二值图像BW的数据格式转换成uint8格式的。 因为二值图像的图像数据只取0和1, 所以这里的转换效果不过把1映射成255。