Matlab图像处理(入门笔记)
作者:互联网
Matlab图像处理
注:某些函数有些过时
1. 图像的数据结构
1.1 矩阵
- 黑白图像
- 矩阵中元素取值只有0、1
- 0表示黑色,1表示白色
- 黑白图像又叫二值图或二进制图
I = [ 1 1 0 0 1 1 1 0 1 ] I= \left[ \begin{matrix} 1&1&0 \\ 0&1&1 \\ 1&0&1 \end{matrix} \right] I=⎣⎡101110011⎦⎤
- 灰度图像
- 矩阵的元素由一个量化的灰度级表示,通常为8位,即0~255
- 0表示黑色,1表示白色
- 彩色图像
- RGB图像由红、绿、蓝组成
- RGB图像的每个像素都是由不同灰度级的红、绿、蓝描述的
- 每种单色的描述与灰度图像描述相同
1.2 链码
- 用于描述图像边界
- 按标准方向的斜率分为4向链码、8向链码
- 图像的描述与起始点的选择有关,标记起点坐标,其余用线段的方向数表示
- 链码归一化:将链码看作自然数,将最小的自然数看作归一化的结果
1.3 拓扑结构
- 用于描述图像的基本结构
- 相邻:一个像素与其周围像素组成邻域
- p周围有8个相邻像素点
只考虑上下左右:4-邻域
r | ||
---|---|---|
r | p | r |
r |
只考虑对角:对角邻域
s | s | |
---|---|---|
p | ||
s | s |
考虑全部:8-邻域
s | r | s |
---|---|---|
r | p | r |
s | r | s |
1.4 关系结构
用于描述一组目标物体之间的相互关系
- 串描述
- 适用于描述可从头到尾或其他连续形式的图像元素
- 链码基于串描述思想
- 树描述
- 能够描述不连接区域
- 能够描述不连接区域
2. Matlab 图像处理
2.1 图像处理工具箱
2.2 图像类型的转换
-
RGB图像转换为灰度图像:
X=rgb2gray(I)
-
RGB图像转换为索引图像:
X=rgb2ind(I)
还可以输入参数项dither_option
,选择是否使用抖动RGB图像一个像素占用三个字节, 分别存储R、G、B分量的值,而索引图像一个像素占用一个字节
索引模式主要用于网络上的图片传输和一些对图像象素、大小等有严格要求的地方 -
灰度图像转换为索引图像
[X,map]=gary2ind(I,n)
- I指原灰度图像,n为灰度等级,默认为64
- [X,map]对应转换后的索引图像,map中对应的颜色值为gray(n)中的颜色值
[X,map]=gary2ind(BW,n)
- BW指原二值图像,n为灰度等级,默认为2
-
索引图像转换为灰度图像:
I=ind2gray(X,map)
输入图像的数据类型可以是double型或unit8型,但输出为double型 -
索引图像转换为RGB图像:
RGB=ind2rgb(X,map)
输入图像的数据类型可以是double型、unit8型或unit16型,但输出为double型 -
二值图像的转换:
im2bw()
- 在MATLAB中,二值图像的数据类型为logical型,黑:0、白:1
- 阈值法:大于阈值取1、小于阈值取0
im2bw()
若输入的不是灰度图像,先将其转换为灰度图,再通过阈值法转换为二值图
- 数据矩阵转换为灰度图像:
mat2gray(X,[xmin,xmax])
- 按指定的取值范围 [xmin,xmax] 将数据矩阵X转换为灰度图I。xmin对应灰度值0,即黑色;xmax对应灰度值1,即白色。小于xmin的取0,大于xmax的取1。
- 如果不指定[xmin,xmax],将矩阵X中最大值设为xmax,最小值设为xmin。
2.3 图像文件的读写
- 图像文件信息读取
INFO=imfinfo('filename','fmt')
或INFO=imfinfo('filename,fmt')
- filename为文件名,fmt为文件扩展名
- INFO是一个结构数组,基本内容如下
结构数组成员名 | 所代表含义 |
---|---|
Filename | 文件名称 |
FileMoDate | 文件最后修改日期和时间(日-月-年 时:分:秒) |
FileSize | 文件大小(子节) |
Format | 文件扩展名 |
FormatVersion | 文件格式版本号 |
Width | 图像宽度(像素) |
Height | 图像高度(像素) |
BitDepth | 每个像素所占位宽 |
ColorType | 图像类型 |
- 图像文件的读取
A = imread(filename)
A = imread(filename,fmt)
A = imread(___,idx)
A = imread(___,Name,Value)
[A,map] = imread(___)
[A,map,transparency] = imread(___)
- A = imread(filename) 从 filename 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。
- A = imread(filename,fmt) 另外还指定具有 fmt 指示的标准文件扩展名的文件的格式。如果 imread 找不到具有 filename 指定的名称的文件,则会查找名为 filename.fmt 的文件。
- A = imread(___,idx) 从多图像文件读取指定的图像。此语法仅适用于 GIF、PGM、PBM、PPM、CUR、ICO、TIF、SVS 和 HDF4 文件。您必须指定 filename 输入,也可以指定 fmt。
- A = imread(___,Name,Value) 使用一个或多个名称-值对组参数以及先前语法中的任何输入参数来指定格式特定的选项。
- [A,map] = imread(___) 将 filename 中的索引图像读入 A,并将其关联的颜色图读入 map。图像文件中的颜色图值会自动重新调整到范围 [0,1] 中。
- [A,map,transparency] = imread(___) 另外还返回图像透明度。此语法仅适用于 PNG、CUR 和 ICO 文件。对于 PNG 文件,如果存在 alpha 通道,transparency 会返回该 alpha 通道。对于 CUR 和 ICO 文件,它为 AND(不透明度)掩码。
- 图像文件的保存
imwrite(A,filename)
imwrite(A,map,filename)
imwrite(___,fmt)
imwrite(___,Name,Value)
- imwrite(A,filename) 将图像数据 A 写入 filename 指定的文件,并从扩展名推断出文件格式。imwrite 在当前文件夹中创建新文件。输出图像的位深取决于 A 的数据类型和文件格式。对于大多数格式来说:
- 如果 A 属于数据类型 uint8,则 imwrite 输出 8 位值。
- 如果 A 属于数据类型 uint16 且输出文件格式支持 16 位数据(JPEG、PNG 和 TIFF),则 imwrite 将输出 16 位的值。如果输出文件格式不支持 16 位数据,则 imwrite 返回错误。
- 如果 A 是灰度图像或者属于数据类型 double 或 single 的 RGB 彩色图像,则 imwrite 假设动态范围是 [0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
- 如果 A 属于 logical 数据类型,则 imwrite 会假定数据为二值图像并将数据写入位深为 1 的文件(如果格式允许)。BMP、PNG 或 TIFF 格式以输入数组形式接受二值图像。
- 如果 A 包含索引图像数据,则应另外指定 map 输入参数。
- imwrite(A,map,filename) 将 A 中的索引图像及其关联的颜色图写入由 map filename 指定的文件。
- 如果 A 是属于数据类型 double 或 single 的索引图片,则 imwrite 通过从每个元素中减去 1 来将索引转换为从 0 开始的索引,然后以 uint8 形式写入数据。
- 如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
- imwrite(___,fmt) 以 fmt 指定的格式写入图像,无论 filename 中的文件扩展名如何。您可以在任何先前语法的输入参数之后指定 fmt。
- imwrite(___,Name,Value) 使用一个或多个名称-值对组参数,以指定 GIF、HDF、JPEG、PBM、PGM、PNG、PPM 和 TIFF 文件输出的其他参数。您可以在任何先前语法的输入参数之后指定 Name,Value。
- 图像文件的显示
- 常用
imshow()
,也可用imtool()
- 像素信息的显示
impixel()
:返回像素或像素集的数据值,可将像素坐标作为函数的输入参数,也可以用鼠标选中像素impixelinfo()
:在当前显示的图像中创建一个像素信息工具,可显示鼠标光标所在像素点的信息,并且可以显示图像窗口中所有图像的像素信息
- 视频文件的读写(略):
aviread()
(旧版本)、aviinfo()
(旧版本)、movie()
mmfileinfo
、mmreader()
、read()
2.4 图像点运算
- 点运算又称为对比度增强、对比度拉伸或灰度转换
- 输出图像每个点的灰度值仅由对应的输入像素点决定
- 运算不改变图像内像素点之间的空间关系
B ( x , y ) = f [ A ( x , y ) ] B(x,y)=f[A(x,y)] B(x,y)=f[A(x,y)] - A为原图像,B为处理后的图像
- 按数学关系分为线性灰度变换、分段线性灰度变换和非线性灰度变换
2.5 图像的空间变换
imwarp()
B = imwarp(A,tform)
B = imwarp(A,D)
[B,RB] = imwarp(A,RA,tform)
[___] = imwarp(___,interp)
[___] = imwarp(___,Name,Value)
- B = imwarp(A,tform) 根据几何变换 tform 来变换数值、逻辑或分类图像 A。该函数在 B 中返回变换后的图像。
- B = imwarp(A,D) 根据位移场 D 变换图像 A。
- [B,RB] = imwarp(A,RA,tform) 变换由图像数据 A 指定的空间参照图像及其关联的空间参照对象 RA。输出是由图像数据 B 指定的空间参照图像及其关联的空间参照对象 RB。
- [___] = imwarp(___,interp) 指定要使用的插值的类型。
- [___] = imwarp(___,Name,Value) 指定名称-值对组参数来控制几何变换的各个方面。
imcrop | 裁剪图像 |
---|---|
imcrop3 | Crop 3-D image |
imresize | 调整图像大小 |
imresize3 | Resize 3-D volumetric intensity image |
imrotate | 旋转图像 |
imrotate3 | Rotate 3-D volumetric grayscale image |
imtranslate | Translate image 转换图像 |
impyramid | Image pyramid reduction and expansion 对图像进行成倍的放大与缩小 |
3. 图像增强
3.1 目的
- 提高图像质量和可辨识度
- 图像质量
- 逼真度:被评价图像与原标准图像的偏离程度
- 可懂度:图像能向人或机器提供信息的能力
3.2 空域内的图像增强
调整灰度图像的明暗对比度
-
灰度变换增强
- 只改变像素点灰度值
imhist()
获取直方图
-
直方图增强
是根据输入图像的灰度概率分布来确定其对应的输出灰度值,通过扩展图像的动态范围达到提升图像对比度的目的- 直方图均衡化:
J=histeq(I)
- 直方图规定化:
hgram=ones(1,256); J=histeq(I);
- 直方图均衡化:
- 通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图
- 有时并不需要图像的直方图具有整体的均匀分布(均衡化),而希望直方图与规定要求的直方图一致,这就是直方图规定化。可以增强特定灰度级分布范围内的图像
3.3 图像的统计特性
-
均值:
mean()
mean(A,dim)
- dim=1,对列求平均值;
mean(A,1)
=mean(A)
- dim=2,对行求平均值
- dim=1,对列求平均值;
mean2(A)
=mean(mean(A))
-
方差:
std()
-
标准差:
std2()
-
二维相关系数:
corr2()
3.4 绘制灰度图像等高线
imcontour(I,n)
:I为灰度图像的二维数据矩阵;指定等高线条数为n,缺省则函数自动选取
3.5 空域滤波
对图像中每个像素为中心的邻域进行一系列的运算,然后将得到的结果代替原来的像素值。
-
线性空域滤波
- 线性平均滤波(常见)
常用模板大小:3×3
h = 1 5 [ 0 1 0 1 1 1 0 1 0 ] h=\frac{1}{5}\left[ \begin{matrix} 0&1&0\\ 1&1&1\\ 0&1&0 \end{matrix} \right] h=51⎣⎡010111010⎦⎤
f ′ ( x ) = 1 5 [ f ( x , y − 1 ) + f ( x − 1 , y ) + f ( x , y ) + f ( x + 1 , y ) + f ( x , y + 1 ) ] f'(x)=\frac{1}{5}[f(x,y-1)+f(x-1,y)+f(x,y)+f(x+1,y)+f(x,y+1)] f′(x)=51[f(x,y−1)+f(x−1,y)+f(x,y)+f(x+1,y)+f(x,y+1)]
J=imfilter(I,h);
- 线性平均滤波(常见)
-
非线性空域滤波
- 中值滤波:保护边缘的图像平滑方法
- 二维中值滤波
medfilt2()
适用于去除图像中的椒盐噪声,平滑效果优于均值滤波
- 二维中值滤波
- 顺序统计滤波
B = ordfilt2(A, order, domain)
- A :Input Marix (输入矩阵)
- order:指明对于A中某个元素值,要用其邻域中的第几大的元素去替代这个元素的值
- domain:过滤窗口的大小,0元素对应的位置不参与排序
- 自适应滤波
- 二维自适应滤波
-
J = wiener2(I,[m n],noise)
- [m n] 指定用于估计局部图像均值和标准差的邻域的大小(m×n)
- 加性噪声(高斯白噪声)功率假定为 noise
-
[J,noise_out] = wiener2(I,[m n])
- 返回 wiener2 在进行滤波之前计算的加性噪声功率的估计值
-
- 二维自适应滤波
- 中值滤波:保护边缘的图像平滑方法
3.6 频域滤波
频域增强:将图像经傅里叶变换,从空间域变换到频率域fft2()
,然后在频域内进行处理,最后再反变换回空间域ifft2()
- 低通滤波:通过低频,衰减抑制高频。使图像去噪声平滑,但会抑制边界。理想滤波器、巴特沃兹滤波器、高斯滤波器
- 高通滤波:衰减抑制低频,通过高频。锐化,突出边界,但会丢失必要信息。为了既加强图像的细节又抑制噪声,可采用高频加强滤波。由一个高通滤波器和一个全通滤波器构成
- 带阻滤波:用来抑制距离频域中心一定距离的一个圆环区域的频率,用来消除一定频率范围的周期噪声
- 同态滤波:压缩灰度动态范围,增强对比度
补充 图像滤波
修正或增强图像,包括平滑、锐化和边缘增强。
O
(
i
,
j
)
=
∑
m
,
n
I
(
i
+
m
,
j
+
n
)
∗
K
(
m
,
n
)
O(i,j) = \sum_{m,n}^{ }I(i+m,j+n)*K(m,n)
O(i,j)=m,n∑I(i+m,j+n)∗K(m,n)
- 均值滤波:用其像素点周围像素的平均值代替元像素值,但会过滤掉图像的边缘信息。
- 算术均值滤波器
- 几何均值滤波器
- 中值滤波:用测试像素周围邻域像素集中的中值代替原像素,适用于去除椒盐噪声和斑块噪声。
- 高斯滤波:平滑图像,依据距离来加权平均
- 权重:
一维高斯: f ( x ) = 1 σ 2 π e − x 2 2 σ 2 f(x) = \frac{1}{\sigma\sqrt{2\pi }}{e}^{\frac{-x^{2}}{2\sigma^2}} f(x)=σ2π 1e2σ2−x2
二维高斯:KaTeX parse error: Undefined control sequence: \siga at position 26: …frac{1}{{2\pi }\̲s̲i̲g̲a̲^2}{e}^{\frac{-… - 边界处理:把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵
- 权重:
- 双边滤波:相较高斯滤波能更好的保存图像边缘信息。
- 一个与空间距离相关的高斯核函数与一个灰度距离相关的高斯函数相乘
空间距离: e − ( x i − x c ) 2 + ( y i − y c ) 2 2 σ 2 e^{-\frac{(x_i-x_c)^2+(y_i-y_c)^2}{2\sigma^2}} e−2σ2(xi−xc)2+(yi−yc)2
灰度距离: e − ( g r a y ( x i , y i ) − g r a y ( x c , y c ) ) 2 2 σ 2 e^{-\frac{(gray(x_i,y_i)-gray(x_c,y_c))^2}{2\sigma^2}} e−2σ2(gray(xi,yi)−gray(xc,yc))2
- 一个与空间距离相关的高斯核函数与一个灰度距离相关的高斯函数相乘
4 图像复原
沿图像退化逆过程进行处理,达到抑制噪声,改善图像质量的目的。
4.1 噪声模型
-
分类
- 加性噪声
- 乘性噪声
-
图像添加噪声:
g = imnoise(f, type, parameters)
- g是被污染的图像
- f是输入的原图像
- type是加入的噪声类型
- ‘gaussian’:高斯噪声
- ‘localvar’:0均值白噪声
- ‘poisson’:泊松噪声
- ‘solt & pepper’:椒盐噪声
- ‘speckle’:乘性噪声
- parameters是噪声的一些参数
4.2 空域滤波复原方法
- 均值滤波:用其像素点周围像素的平均值代替元像素值,但会过滤掉图像的边缘信息。
- 算术均值滤波器
- 几何均值滤波器
- 顺序统计滤波
- 中值滤波
medfilt2()
:能很好地保留图像边缘,适合去除椒盐噪声,优于均值滤波 - 最大值滤波:去除椒盐噪声,但会从黑色物体边缘去除一些黑色色素
- 最小值滤波:去除椒盐噪声,但会从白色物体边缘去除一些白色色素
- 中值滤波
- 自适应滤波
wiener2()
4.3 图像复原方法
- 逆滤波复原
- 逆滤波:通过的傅立叶反变换得到图像的估计值
- 逆滤波是一种非约束复原方法
- 非约束复原:在已知退化图像的情况下,根据对退化模型和噪声的一些知识,做出对原图像的估计,使得某种事先确定的误差准则为最小
- 维纳滤波复原
deconvwnr()
:计算量低、抗噪声性能好 - 约束最小二乘法复原
deconvreg()
- Lucy-Richardson复原
deconvlucy()
- 盲解卷积复原
deconvblind()
5 图像分割技术
5.1 边缘分割技术
利用物体和背景在某种图像特性上的差异
- 图像中的线段
- 间断点检测模板
[ − 1 − 1 − 1 − 1 8 − 1 − 1 − 1 − 1 ] \left[ \begin{matrix} -1&-1&-1\\ -1&8&-1 \\ -1&-1&-1\\ \end{matrix} \right] ⎣⎡−1−1−1−18−1−1−1−1⎦⎤ - 线段检测模板
[ − 1 − 1 − 1 2 2 2 − 1 − 1 − 1 ] [ − 1 − 1 2 − 1 2 − 1 2 − 1 − 1 ] [ − 1 2 − 1 − 1 2 − 1 − 1 2 − 1 ] [ 2 − 1 − 1 − 1 2 − 1 − 1 − 1 2 ] \left[ \begin{matrix} -1&-1&-1\\ 2&2&2 \\ -1&-1&-1\\ \end{matrix} \right] \left[ \begin{matrix} -1&-1&2\\ -1&2&-1 \\ 2&-1&-1\\ \end{matrix} \right] \left[ \begin{matrix} -1&2&-1\\ -1&2&-1 \\ -1&2&-1\\ \end{matrix} \right] \left[ \begin{matrix} 2&-1&-1\\ -1&2&-1 \\ -1&-1&2\\ \end{matrix} \right] ⎣⎡−12−1−12−1−12−1⎦⎤⎣⎡−1−12−12−12−1−1⎦⎤⎣⎡−1−1−1222−1−1−1⎦⎤⎣⎡2−1−1−12−1−1−12⎦⎤
- 间断点检测模板
- 微分算子法 e.g.
J=edge(I,'roberts',35/255)
- Roberts算子:对于离散图像,边缘检测算子用图像的垂直和水平差分来逼近梯度算子,返回二值图像
- Prewitt算子:可用来检测水平、垂直边缘,返回二值图像
- Sobel算子:可分别检测水平、垂直边缘
- Canny算子
edge(I,'canny')
:低误码率、高定位精度和抑制虚假边缘 - LOG算子:先采用高斯函数对图像进行平滑,再采用拉普拉斯算子监测图像的边缘。具有边界定位精度高、抗干扰能力强、连续性强等优点
5.2 阈值分割
- 全局阈值:通过全局信息设立阈值
- 整个图像分为目标对象(黑色)和背景对象(白色),全局阈值将整个图像的灰度阈值设置为常数
- 对于物体和背景对比比较明显的图像,其灰度直方图为双峰形状,可以选择两峰之间的波谷对应的像素值做为全局阅值
- OTSU阈值分割(最大类间方差法):以最佳阈值将图像的灰度值分割成两部分,使两部分之间的方差最大,即具有最大的分离性
- 迭代式國值分割(比较有效)
5.3 区域分割
- 区域生长法:将具有相似性质的像素集合起来构成区域,相似性度量可以包括平均灰度值、纹理、颜色等信息
- 分水岭法
watershed()
6 图像变换技术
图像某些性质在空间域很难获得,故将图像从空间域变换到变换域处理后再反变换。
6.1 Radon变换和反变换radon()&iradon()
获取平移旋转投影数据
6.2 傅里叶变换和反变换fft()&ifft()
从空间域转换为频率域,可进行图像分析、增强和压缩。
傅里叶变换物理意义:将图像的灰度分布函数变换为图像的频率分布函数
fft()
:一维离散傅里叶变换
fft2()
:二维离散傅里叶变换=fft(fft())
fftshift()
:平移
6.3 离散余弦变换和反变换
以一组不同频率和幅值的余弦函数和来近似一幅图像,实际上是傳立叶变换的实数部分
对于一幅图像,其大部分可视化信息都集中在少数的变换系数上。因此,离散余弦变换经常用于图像压缩,例如国际压缩标准的JPEG格式
图像块操作:blkproc()
6.4 其他变换
Hadamard变换、Hough变换(图像识别几何形状)以及图像的小波变换等
7 彩色图像处理
标签:入门,变换,滤波,像素,图像处理,灰度,Matlab,图像,&- 来源: https://blog.csdn.net/yusuhuayu/article/details/115392583