2018-07-17 22:34:21 BAR_WORKSHOP 阅读数 6044
  • OpenGL视频教程

    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染管线,得到一个猴子的模型。

    56920 人正在学习 去看看 黄棒清

自己在学习过程中查阅资料整理了MATLAB图像处理工具箱中函数的名称列表,以及MathWorks中讲解各个函数使用的链接:

1.绘图工具箱

plot 基本绘图函数 mesh 绘制三维网格曲面
fplot 绘制数学函数图 surf 绘制着色的三维彩色曲面
ezplot 直接绘制隐函数图形 meshgrid 针对三维图形的x和y数组
bar 绘制条形图 semilogx 绘制x对数坐标系图
area 绘制面积图 semilogy 绘制y对数坐标系图
pie 绘制饼形图 loglog 绘制对数坐标系图
title 标题 contour 绘制等高线图
hist 绘制直方图 stem 绘制火柴杆图
axis 控制轴的比例和外观

grid

网格线
xlabel x-轴标记 ylabel y-轴标记

2.图像的显示

imshow 以处理图像的方式显示图像 imtool 以图像工具的方式显示图像
subimage 以单幅图像的形式显示排列好的多幅图像 immovie 多帧图像制成电影
implay 播放电影,视频或图像序列 montage 矩形蒙太奇显示多幅图像
warp 纹理映射表面    

3.几何变换

imrotate 旋转图像 makeresampler 创建重取样结构
imcrop 裁剪图象 maketform 创建空间变换结构(TFORM)
imresize 调整图像大小 fliptform 转换TFORM结构的输入和输出角色
checkerboard 创建棋盘格图像 tformarray 对N-D阵列施以空间变换
findbounds 为空间变换寻找输出边界 tformfwd 应用正向空间变换
imtransform 对图像进行二维空间变换 tforminv 应用逆向空间变换
impyramid 以金字塔形式缩减或扩展图像    

4.像素值和统计

imhist 显示图像数据的直方图 std2 矩阵元素的标准差
impixel 像素彩色值 mean2 矩阵元素的平均或均值
imcontour 创建图像数据轮廓线 corr2 二维相关系数
improfile 沿着线段的横截面的像素值 regionprops 度量图像区域的特性

5.图像变换

fanbeam 扇形射束变换 fan2para 把扇形射束投影变换为平行射束
ifanbeam 反扇形射束变换 para2fan 把平行射束投影变换为扇形射束
radon 雷登变换 dct2 二维离散余弦变换
iradon 反雷登变换 idct2 二维反离散余弦变换
phantom 创建头部幻影图像 dctmtx 离散余弦变换矩阵

6.图像分析

bwtraceboundary 追踪二值图像中的目标 qtdecomp 四叉树分解
edge 寻找灰度图像的边缘 qtgetblk 得到块值
hough 霍夫变换 qtsetblk 设置块值
houghlines 基于霍夫变换的线段提取    
houghpeaks 识别霍夫变换的峰    

7.图像算术

imabsdiff 计算两幅图像的绝对差 imlincomb 图像的线性组合
imcomplement 图像求补 ippl 检查IPPL是否存在

8.图像去模糊

deconvblind

盲去卷积法

edgetaper 点扩散函数渐变边缘
deconvlucy Lucy-Richardson方法 otf2psf 把光传递函数转换为点扩散函数
deconvreg 规则滤波器法 psf2otf 把点扩散函数转换为光传递函数
deconvwnr 维纳滤波器法    

9.线性滤波以及线性二维滤波器设计

convmtx2

二维卷积矩阵 fsamp2 频率取样的二维FIR滤波器
fspecial 创建预定义的二维滤波器 ftrans2 频率变换的二维FIR滤波器
imfilter 多维图像的N-D滤波 fwind1 一维窗方法的二维FIR滤波器
freqz2 二维频率响应 fwind2 二维窗方法的二维FIR滤波器

10.图像配准

normxcorr2 归一化的二维互相关 cp2tform 用控制点对推断空间变换
cpselect 控制点选择工具 cpstruct2pairs 把CPSTRUCT转换为控制点对
cpcorr 用互相关调整控制点位置    

11.图像增强

histeq 用直方图均衡增强对比度 wiener2 二维自适应噪声去除滤波
imadjust 调整图像亮度值或彩色图 intlut 用查表法转换整数值
medfilt2 二维中值滤波 adapthisteq 有限对比度的自适应直方图均衡CLAHE
ordfilt2 二维统计排序滤波 stretchlim 寻找如何限制一幅图像的对比度拉伸

12.形态学操作

灰度图像和二值图像 conndef 默认的连通性数组 imhmax 最大H变换
imbothat 底帽滤波 imhmin 最小H变换
imclearborder 连接到图像边缘的抑制光结构 imimposemin 强迫最小
mclose 形态学闭操作图像 imopen 形态学开操作图象
imdilate 膨胀图像 imreconstruct 形态学重建
imerode 腐蚀图像 imregionalmax 区域最大
imextendedmax 最大扩展变换 imregionalmin 区域最小
imextendedmin 最小扩展变换 imtophat 顶帽滤波
imfill 填充图像区域和孔洞 watershed 分水岭变换
二值图像 applylut 查表法的领域操作 bwmorph 二值图像的形态学操作
bwarea 二值图像中的目标区域 bwpack 打包二值图像
bwareaopen 形态学开二值图像 bwperim 寻找目标的周长
bwdist 二值图像的距离变换 bwselect

选择目标

bweuler 二值图像的欧拉数 bwulterode 最终腐蚀
bwhitmiss 二元击中-击不中操作 bwunpack 拆包二值图像
bwlabel 二维二值图像中标记连通分量 makelut 为了使用APPLYLUT而创建查找表
bwlabeln N维二值图像中标记连通分量    

13.彩色空间

cmpermute 在彩色图中重新安排彩色 lab2uint8 L*a*b转变为uint8
cmunique 去除索引图像的彩色图中不需要的颜色 xyz2double xyz颜色值转变为double
imapprox 用较少颜色之一近似索引图像 xyz2uint16 xyz颜色值转变为uint16
ntsc2rgb NTSC转变为RGB makecform 创建独立于设备的彩色空间变换结构CFORM
ycbcr2rgb YCbCr转变为RGB applyform 适用于与设备无关的彩色空间变换
rgb2ntsc RGB转变为NTSC iccfind 搜索ICC剖面
rgb2ycbcr RGB转变为YCbCr iccroot 寻找系统的ICC剖面存放处
whitepoint 标准照明的XYZ颜色值 iccwrite 写ICC彩色剖面
lab2double L*a*b转变为double isicc 对完全剖面结构为真
lab2uint6 L*a*b转变为uint16    

14.邻域和块处理

bestblk 块处理的最佳尺寸 col2im 把矩阵列重排为块
blkproc 图像的不同块处理 colfilt 列方式的邻域操作
nlfilter 一般的滑动邻域处理 im2col 把图像块重排为列

 

2018-12-12 17:03:01 lengjiayi 阅读数 2285
  • OpenGL视频教程

    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染管线,得到一个猴子的模型。

    56920 人正在学习 去看看 黄棒清

一些基本数字图像处理算法

版权声明:本文为原创文章,未经博主允许不得用于商业用途。

所有的图像算法都在DIPAlgorithm类中,并且所有算法都为抽象成员函数。我已经按照java注释规范为所有方法添加使用说明注释,具体实现可见于DIPAlgorithm.java,这里只做算法说明。

1 图像扭曲

在这里插入图片描述
模仿PS的扭曲功能,通过建立一个三角形映射网格实现对图像的扭曲。

如上图,一共设置了45个控制点围成74个三角形网格

扭曲即形变处理其实是寻找一个函数,以所有网格顶点原始坐标为输入,扭曲后所有网格顶点坐标为输出。为了简化计算任务,采用控制栅格插值方法,对每个三角网格独立计算映射关系,如下图:

在这里插入图片描述
即求解矩阵MM满足MA=BMA = B,其中AA为原顶点的齐次矩阵:

A=[x1y11x2y21x3y31] A = \begin{bmatrix} x_{1} & y_{1} & 1 \\ x_{2} & y_{2} & 1 \\ x_{3} & y_{3} & 1 \\ \end{bmatrix}

B为形变后顶点的其次矩阵:

B=[x1x2x3y1y2y3] B = \lbrack\begin{matrix} x_{1}^{'} & x_{2}^{'} & x_{3}^{'} \\ y_{1}^{'} & y_{2}^{'} & y_{3}^{'} \\ \end{matrix}\rbrack

M即为2×32 \times 3的映射矩阵,且由于三角形三点不共线,因此A为可逆阵,

M=BA1 M = BA^{- 1}

对于三角形中的点p(x, y)p\left( x,\ y \right),其映射后坐标p=M[xy1]p^{'} = M\begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix}

2 直方图计算

直方图计算实际上即求图像的概率密度函数PDF,只需遍历一次所有像素点即可获得。

3 直方图均衡化算法

对于连续图像直方图均衡化其实是种点运算f,
对不同灰度值做映射,使得所有像素频率相等。

对于点运算f,有如下性质:

DB=f(DA), HB(DB)ΔDB=HA(DA)ΔDA D_{B} = f\left( D_{A} \right),\ H_{B}\left( D_{B} \right)\Delta D_{B} = H_{A}\left( D_{A} \right)\Delta D_{A}

其中D为灰度值,H即为灰度值在图像中的频数,整理可得

HB(DB)=HA(DA)ΔDAΔDB=HA(DA)ΔDBΔDA=HA(DA)dDBdDA H_{B}\left( D_{B} \right) = \frac{H_{A}\left( D_{A} \right)\Delta D_{A}}{\Delta D_{B}} = \frac{H_{A}\left( D_{A} \right)}{\frac{\Delta D_{B}}{\Delta D_{A}}} = \frac{H_{A}\left( D_{A} \right)}{\frac{dD_{B}}{dD_{A}}}

=HA(DA)f(DA)=HA(f1(DB))f(f1(DB)) = \frac{H_{A}\left( D_{A} \right)}{f'(D_{A})} = \frac{H_{A}\left( f^{- 1}\left( D_{B} \right) \right)}{f'(f^{- 1}(D_{B}))}

即:

寻找函数f使得HB(D)H_{B}(D)为常数A0Dm,A0,Dm\frac{A_{0}}{D_{m}},A_{0},D_{m}

由(1)可知,KaTeX parse error: Expected 'EOF', got '\ ' at position 58: …\right)}{f'(D)}\̲ ̲\Rightarrow f^{…

f(D)=DmCDF(D)f\left( D \right) = D_{m}CDF(D),CDF即累积分布函数

因此只需求得直方图的前序和即可获得映射关系。

4 图像灰度化

目前比较符合人眼的灰度化权重为0.299、0.578和0.114,为了加速计算使用近似公式D=(3r+g+6b)/10D = (3r + g + 6b)/10

5 图像二值化

我使用的二值化算法为OSTU大律二值化算法。二值化操作即利用分割阈值u,将图片分为前景后景两部分。OSTU大律法认为使得前景像素和背景像素灰度方差g最大的阈值即为最佳分割阈值。

g=w0w1(u0u1)2 g = w_{0}w_{1}\left( u_{0} - u_{1} \right)^{2}

其中w0, w1w_{0},\ w_{1}为前景、后景在图像中的比例,KaTeX parse error: Expected 'EOF', got '\ ' at position 7: u_{0},\̲ ̲u_{1}为前景、后景的平均灰度。

在实现时,只需遍历所有灰度,利用CDF求出每种灰度的方差,取最大者作为阈值即可。

6 前景分离

目前主流的前景分离为深度学习算法。这里只使用了最基本的阈值分离法,分别为RGB三个通道设置不同阈值,将小于阈值的像素作为背景,大于阈值的作为前景。

7 滤波

我使用的滤波方法是高斯滤波和中值滤波,高斯滤波即使用二维高斯函数作为滤波函数,中值滤波即使用邻域的中位数作为滤波函数。

高斯滤波器为线性滤波器,可以有效消除高斯噪声。由于高斯函数离中值越近权重越大,因此相对于均值滤波器更加柔和,对边缘的保留效果更好。这里我使用的是如下矩阵做卷积:

[1232124642367632464212321] \begin{bmatrix} 1 & 2 & 3 & 2 & 1 \\ 2 & 4 & 6 & 4 & 2 \\ 3 & 6 & 7 & 6 & 3 \\ 2 & 4 & 6 & 4 & 2 \\ 1 & 2 & 3 & 2 & 1 \\ \end{bmatrix}

中值滤波器为非线性滤波器,可以有效的去除椒盐噪声和斑点噪声并且不会使图像变模糊。

8 形态学扩张和腐蚀

形态学腐蚀可记为AΘB\text{AΘB},其中A为输入图像,B为结构单元。对于二值图像,当且仅当当前像素点满足腐结构单元时才会被保留。对于灰度图像,则可类比为最小值,即

fΘb(x,y)=min{f(xx, yy)b(x,y)(x,yDb)} f\Theta b\left( x,y \right) = min\{ f\left( x - x^{'},\ y - y^{'} \right) - b(x^{'},y')|(x^{'},y^{'} \in D_{b})\}

形态学扩张可看作腐蚀的逆操作,记作ABA\bigoplus B,对于二值图像,将每个有效像素点的邻域结构单元置1,对于灰度图像则取最大值,即

fb(x,y)=max{f(xx, yy)b(x,y)(x,yDb)} f\bigoplus b\left( x,y \right) = max\{ f\left( x - x^{'},\ y - y^{'} \right) - b(x^{'},y')|(x^{'},y^{'} \in D_{b})\}

本程序将结构单元b统一设定为5*5矩形。

通过扩张和腐蚀的结合可实现结构开运算(AoB=(AΘB)BAoB = \left( \text{AΘB} \right)\bigoplus B)和结构闭运算(AoB=(AB)ΘBAoB = \left( A\bigoplus B \right)\text{ΘB})对图像进行粗化、细化、滤波等处理

9 傅里叶变换和滤波

变换公式

傅里叶变换可以将信号从时域转换到频域,因此可以看出许多时域中不明显的特征。二维傅里叶变换(CFT)公式如下:

F(u,v)=f(x,y)e2πj(ux+vy)dxdy F\left( u,v \right) = \iint_{}^{}{f\left( x,y \right)e^{- 2\pi\overrightarrow{j}(ux + vy)}}\text{dxdy}

其中j2=1,f,F{\overrightarrow{j}}^{2} = - 1,f,F,同样二维傅里叶逆变换公式如下:

f(x,y)=F(u,v)e2πj(ux+vy)dudv f\left( x,y \right) = \iint_{}^{}{F\left( u,v \right)e^{2\pi\overrightarrow{j}(ux + vy)}}\text{dudv}

对于离散函数,可以定义离散二维傅里叶变换(DFT)和逆变换:

G(m,n)=1MN0 i  M10<k<N1 g(i,k)e2πj(imM+jnN) G\left( m,n \right) = \frac{1}{\sqrt{\text{MN}}}\sum_{\begin{matrix} 0 \leq \ i\ \leq \ M - 1 \\ 0 < k < N - 1\ \\ \end{matrix}}^{}{g\left( i,k \right)e^{- 2\pi\overrightarrow{j}(\frac{\text{im}}{M} + \frac{\text{jn}}{N})}}

g(i,k)=1MN0 m  M10<n<N1 g(m,n)e2πj(imM+jnN) g\left( i,k \right) = \frac{1}{\sqrt{\text{MN}}}\sum_{\begin{matrix} 0 \leq \ m\ \leq \ M - 1 \\ 0 < n < N - 1\ \\ \end{matrix}}^{}{g\left( m,n \right)e^{2\pi\overrightarrow{j}(\frac{\text{im}}{M} + \frac{\text{jn}}{N})}}

DFT可以理解为对连续二维信号进行了频率为M,
N的采样,之后通过计算其和频域空间M*N个基向量的相关性(在该方向投影)将时域信号映射到频域。iDFT可以理解为通过M*N个基向量合成原始时域信号。

矩阵表示

傅里叶变换实际上是一种线性变换,因此在实际计算中常常将gg扩充为NNN*N方阵,此时DFT可以通过矩阵表示:G=W1gW,Wik=1Ne2πjikNG = \mathcal{W}^{- 1}g\mathcal{W},\mathcal{W}_{\text{ik}} = \frac{1}{N}e^{2\pi\overrightarrow{j}\frac{\text{ik}}{N}}

易知Wik=Wki\mathcal{W}_{\text{ik}} = \mathcal{W}_{\text{ki}},且为正交矩阵,因此W\mathcal{W}为酉矩阵,即W1=(W)T=W\mathcal{W}^{- 1} = \left( \mathcal{W}^{*} \right)^{T} = \mathcal{W}^{*}G=WgWG = \mathcal{W}^{*}g\mathcal{W},其中FFF^{*}F

由于傅里叶变换为酉变换,即Wt=W1\mathcal{W}^{t} = \mathcal{W}^{- 1}

图像的傅里叶变换

对于二维图片可以看作二维矩阵,因此可以进行DFT。二维图片经过DFT后获得的复矩阵的模矩阵可以表示每个频率信号的强度(也可看作先做自相关后再进行傅里叶变换),经过适当处理即可转化为灰度能量谱图片。

线性噪声在频域中通常为点或线,因此可以通过傅里叶变换后进行滤波再通过逆变换复原图片。

算法实现

在实际实现时,根据欧拉公式,ejt=costjsint, ejt=cost+jsinte^{- \overrightarrow{j}t} = cost - \overrightarrow{j}\text{sint},\ e^{\overrightarrow{j}t} = cost + \overrightarrow{j}\text{sint},因此傅里叶变换的核矩阵可以表示为Wik=cos(2πik)jsin(2πik)N\mathcal{W}_{\text{ik}} = \frac{\cos\left( 2\pi ik \right) - \overrightarrow{j}\sin\left( 2\pi ik \right)}{N},为方便运算将W\mathcal{W}分解为虚部系数Wlm\mathcal{W}_{\text{lm}}和实部系数Wre\mathcal{W}_{\text{re}},其中则W=Wre+jWlm\mathcal{W} = \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}}。变换结果同样分解为G=Gre+jGlmG = G_{\text{re}} + \overrightarrow{j}G_{\text{lm}},则DFT可以表示为:

G=WgW=(WrejWlm)g(Wre+jWlm)=WregWre+WlmgWlmj(WlmgWre+WregWlm) G = \mathcal{W}^{*}g\mathcal{W =}\left( \mathcal{W}_{\text{re}} - \overrightarrow{j}\mathcal{W}_{\text{lm}} \right)g\left( \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}} \right) = \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{lm}} - \overrightarrow{j}\left( \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{lm}} \right)

{Gre=WregWre+WlmgWlmGlm=WlmgWreWregWlm  \left\{ \begin{matrix} G_{\text{re}} = \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{lm}} \\ G_{\text{lm}} = - \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{re}} - \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{lm}} \\ \end{matrix} \right.\

同理,iDFT可以表示为:

g=(Wre+jWlm)(Gre+jGlm)(WrejWlm) g = \left( \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}} \right)(G_{\text{re}} + {\overrightarrow{j}G}_{\text{lm}})\left( \mathcal{W}_{\text{re}} - \overrightarrow{j}\mathcal{W}_{\text{lm}} \right)

其中,为了将能量谱转化为可见的灰度图,为能量谱取对数值进行归一化。且由于在频域中两个维度频率都为0时(即W00\mathcal{W}_{00}处)为图像能量的总和,因此通过log(e+1)256log(W00+1)log(e + 1)*\frac{256}{\log\left( \mathcal{W}_{00} + 1 \right)}可以做进一步归一化。

2019-09-21 17:35:42 d__yz 阅读数 21
  • OpenGL视频教程

    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染管线,得到一个猴子的模型。

    56920 人正在学习 去看看 黄棒清

什么是数字图像

	数字图像:一个被抽样和量化后的 二维函数(光学方法产生),采用等距矩形网格抽样,对幅度进行等间隔量化

图像的分类

	按颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像、真彩色RGB图像
	大多数图像处理软件都支持这4钟类型的图像

二值图像

	仅有0、1两个值构成的二维矩阵,0表示黑色,1表示白色。
	数据类型:二进制位
	用途:文字、线条图的扫描识别(OCR)和掩膜图像的存储

灰度图像

	矩阵取值范围为[0,255],0表示纯黑色,255表示纯白色,中间值为纯黑色到纯白色 的过渡色
	数据类型:八位无符号整形
	也可以取值[0,1],二值图像是特殊的灰度图像

索引图像

	由图像的二维矩阵+颜色的索引矩阵MAP构成
	图像的二维矩阵存放灰度值,而索引矩阵MAP存放RGB颜色,每一行的二维矩阵的灰度值对应着MAP矩阵的颜色,通过改变索引矩阵即MAP,颜色的形式可以调整的
	**图像在屏幕上显示时,每一像素的颜色由存放在矩阵中像素的灰度值作为索引通过检索颜色索引矩阵MAP得到**
	数据类型:八位无符号整形
	用途:存放色彩要求比较简单的图像

真彩色RGB图像

	RGB图像每一个像素的颜色值直接存放在图像矩阵中
	3个MxN的二维矩阵分别存放着R、G、B三个颜色分量
	数据类型:8位无符号的整形
	用途:存放真彩色图像、灰度图像

图像文件格式

图像是对人类感知外界信息能力的一种增强形式,是自然界景物的客观反映,是各种观测系统以不同形式和手段观测客观世界而获得的、可以直接或间接作用于人眼的实体。
BMP格式:几乎不进行压缩,占用存储空间大,能被多种Windows应用程序所支持
GIF格式:用来交换图片的,压缩比高,存储空间占用少、不能存储超过256色的图像
JPEG格式:扩展名为.jpg或.jpeg,有损压缩方式去除冗余的图像和彩色数据,具有调节图像质量的功能,用于web浏览图像
JPEG2000格式:具有高压缩率和更多新功能的静态影像压缩技术,支持有损和无损压缩,实现渐进传输(先传轮廓,后传数据),用于扫描仪,数码相机等
TIFF格式:Mac中广泛使用的图像格式,图像格式复杂、存储信息多,有利于原稿的复制,压缩采用LZW无损压缩方案存储,兼容性差
PNG格式:网络图像格式,不失真格式,存储形式丰富,兼有GIF和JPEG的色彩模式,能把图像文件压缩到极限以利于网络传输但还保留所有与图像品质有关的信息,显示速度快,支持透明图像(用网页本身的颜色来代替设为透明的色彩)的制作,不支持动画应用效

2019-04-14 08:16:21 Dujing2019 阅读数 321
  • OpenGL视频教程

    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染管线,得到一个猴子的模型。

    56920 人正在学习 去看看 黄棒清

数字图像处理—频域处理

(六)高通(锐化)频域滤波器

低通滤波使图像变得模糊那样,相反的处理过程一高通滤波,通过削弱傅立叶变换的低频以及保持高频相对不变来锐化图像。图像锐化是一种补偿轮廓 、突出边缘信息以使图像更为清晰的处理方法 。 锐化的目标实质上是要增强原始图像的高频成分 。与图像平滑不同,图像平滑通过积分过程使图像边模糊,图像锐化则是通过微分过程使图像变清晰。图像锐化的目的:

  1. 增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像;
  2. 希望通过锐化处理后,目标物体的边缘鲜明,以便于提取目标的边缘、对图像进行分割、目标区域识别、区域形状提取等,进一步的图像理解与分析奠定基础。

高通滤波器: 理想高通滤波器IHPF;巴特沃思高通滤波器BHPF;高斯高通滤波器GHPF;

高通滤波器的传递函数由下式给出:
在这里插入图片描述

6.1 高通滤波函数

使用函数 lpfilter 构建另一个函数hpfilter,使用它可以产生高通滤波器:

function H = hpfilter(typef M, N, DO, n) 
if nargin 4 == 4
  n = 1;
end
Hlp = lpfilter(type, M, N,DO, n); 
H = 1 - Hlp;

下面分别介绍三种滤波器:理想、布特沃斯和高斯高通滤波器的绘图和图像

理想高通滤波器:与低通滤波器相对,IHPF将以D0为半径的圆周内的所有频率置为0,而毫不衰减地通过圆周外的任何频率。 IHPF 也是物理不可实现的,只能通过计算机实现。和ILPF一样有振铃现象 。

函数公式:
在这里插入图片描述
编写代码:

H = fftshift(hpfilter('ideal', 500, 500, 50));   %对图像频谱进行移动,使0频率点在中心
figure;
subplot(1, 2, 1), surf(double(H(1:10:500, 1:10:500))), title('理想高通滤波器绘图');
subplot(1, 2, 2), imshow(H,[]), title('理想高通滤波器图像');

代码运行效果如下:

布特沃斯高通滤波器:BHPF比IHPF更平滑,它在高低频之间有比较光滑的过渡;BHPF振铃不明显,对微小物体的过滤比IHPF清晰。

函数公式:
在这里插入图片描述
编写代码:

H = fftshift(hpfilter('btw', 500, 500, 50)); 
figure;
subplot(1, 2, 1), surf(double(H(1:10:500, 1:10:500))), title('布特沃斯高通滤波器透视图');
subplot(1, 2, 2), imshow(H,[]), title('布特沃斯高通滤波器图像');

代码运行效果如下:

高斯高通滤波器:GHPF比前2种更平滑,它在高低频之间有光滑的过渡,无振铃效果,对微小物体的过滤更清晰。

函数公式:
在这里插入图片描述
编写代码:

H = fftshift(hpfilter('gaussian', 500, 500, 50)); 
figure;
subplot(1, 2, 1), surf(double(H(1:10:500, 1:10:500))), title('高斯高通滤波器透视图');
subplot(1, 2, 2), imshow(H,[]), title('高斯高通滤波器图像');

代码运行效果如下:

下面对比下不同滤波器对图像的处理效果:

理想高通滤波器:
编写代码:

w = imread('D:\数字图像处理\第三章学习\blackhole.png');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
PQ = paddedsize(size(f));      %获取填充尺寸
[U,V] = dftuv(PQ(1),PQ(2));
DO = 0.05*PQ(2);               %设定滤波器的阈值
F = fft2(f,PQ(1),PQ(2));       %傅里叶变换
H = hpfilter('ideal', PQ(1),PQ(2), DO, 2);   %理想高通滤波
g = dftfilt(f,H);              %用滤波器对图像进行频域滤波
subplot(2, 2, 1), imshow(w), title('原图像');
subplot(2, 2, 2), imshow(fftshift(H),[]), title('以图像显示的理想高通滤波器');
subplot(2, 2, 3), imshow(log(1+abs(fftshift(F))),[]), title('对数增强并居中的fft');
subplot(2, 2, 4), imshow(g,[]), title('理想高通滤波后图像的谱');

运行代码效果如下:
在这里插入图片描述
布特沃斯高通滤波器:
编写代码:

w = imread('D:\数字图像处理\第三章学习\blackhole.png');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
PQ = paddedsize(size(f));      %获取填充尺寸
DO = 0.05*PQ(1);               %设定滤波器的阈值
H = fftshift(hpfilter('btw', PQ(1),PQ(2), DO)); 
g = dftfilt(f,H);
figure;
subplot(1, 3, 1), imshow(w), title('原图像');
subplot(1, 3, 2), imshow(f), title('图像的灰度图像');
subplot(1, 3, 3), imshow(g), title('理想高通滤波后结果');

代码运行效果如下:
在这里插入图片描述

高斯高通滤波器:
编写代码:

w = imread('D:\数字图像处理\第三章学习\blackhole.png');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
PQ = paddedsize(size(f));      %获取填充尺寸
[U,V] = dftuv(PQ(1),PQ(2));
DO = 0.05*PQ(2);               %设定滤波器的阈值
F = fft2(f,PQ(1),PQ(2));       %傅里叶变换
H = hpfilter('gaussian', PQ(1),PQ(2), DO, 2); 
g = dftfilt(f,H);              %用滤波器对图像进行频域滤波
subplot(2, 2, 1), imshow(w), title('原图像');
subplot(2, 2, 2), imshow(fftshift(H),[]), title('以图像显示的高斯高通滤波器');
subplot(2, 2, 3), imshow(log(1+abs(fftshift(F))),[]), title('对数增强并居中的fft');
subplot(2, 2, 4), imshow(g,[]), title('高斯高通滤波后图像的谱');

在这里插入图片描述
实验结论:不同的滤波器对图像的滤波效果是不同的。它们的共同点是图像在经过高通滤波后,消除了模糊,突出了边缘,使低频分量得到了抑制,从而增强了高频分量,使图像的边沿或线条变得清晰,实现了图像的锐化。但理想高通滤波器出现了明显的振铃现象,即图像边缘有抖动现象;而布特沃斯滤波器高通效果较好,但是计算复杂,其优点是有少量的低频通过,故H(u,v)是渐变的,振铃不明显;高斯高通滤波效果比前两者都要好些,更为平滑,没有振铃现象。而且不同的滤波半径和不同的滤波器阶数对图像的滤波效果也是不同的。滤波半径越越小,则图像的滤波效果越好;滤波器阶数越高,则滤波效果越好。

6.2 高频强调滤波

高通滤波器偏离了 dc的0项,因此减少了图像中平均值为 0的值。 一种补偿方法是为高通滤波器加上偏移量。如果偏移量与将滤波器乘以某个大于 1 的常数结合 起来,这种方法就叫做高频强调滤波,因为这个常量乘数突出了高频部分。这个乘数也增加了 低频部分的幅度,但是只要偏移量与乘数相比较小,低频增强的影响就弱于高频增强的影响。 高频强调滤波有如下传递函数:

在这里插入图片描述
a是偏移量,b 是乘数。

下面尝试将将高频强调滤波和直方图均衡化结合起来

编写代码:

w = imread('D:\数字图像处理\第三章学习\blackhole.png');
f = im2double(rgb2gray(w));    %把图像变为灰度图像
PQ = paddedsize(size(f)); 
DO = 0.05*PQ(1);    %,Do的值等于填充过 的图像垂直尺寸的5%
HBW = hpfilter('btw', PQ(1),PQ(2), DO, 2); 
H = 0.5 + 2*HBW;
gbw = dftfilt(f, HBW, 'fltpoint');       %函数 dftfilt 中用 fltpoint 选项以得到浮点结果
gbw = gscale(gbw); 
ghf = dftfilt(f, H, 'fltpoint'); 
ghf = gscale(ghf);
ghe = histeq(ghf, 256); 
subplot(2, 2, 1), imshow(w), title('原图像');
subplot(2, 2, 2), imshow(gbw,[]), title('布特沃斯滤波器滤波后的结果');
subplot(2, 2, 3), imshow(ghf,[]), title('高频强调的结果');
subplot(2, 2, 4), imshow(ghe,[]), title('高频强调后经直方图均衡化结果');

在这里插入图片描述
实验结论:(b)图显示了用二阶布特沃斯高通滤波器对图 (a)滤波后的结果,Do的值等于填充过的图像垂直尺寸的5%。假设滤波器的半径不小于通过变换原点附近的频率,高通滤波就不会对Do的值过度敏感。正如预料的那样,滤波的结果并无特色,但却显示出图像的主要边缘有点模糊。如果某些灰度值是负的,仅有一条途径使一幅非 0 图像的平均值为 0。图 (b)的滤波结果就是这种情况。由于这个原因,我们必须在函数 dftfilt 中用 fltpoint 选项以得到浮点结果。如果不这样做,在默认情况下,负值将被裁剪而转换为 uint8 类(输入图像的类),微弱的细节将丟失。用函数gscale 考虑负值,将会保留这些细节。 高频强调滤波(在这种情况下,a=0.5, b=2.0)的优点显示在图©中,图像中由低频成分引起的灰度色调得以保持。由图可以看出在灰度级窄范围内以灰度为特征的图像直方图均衡化是理想选择。

(七)选择性滤波

7.1带阻和带通滤波器

将低通滤波器和高通滤波器串联,就可以得到带通滤波器。将输入电压同时作用于低通滤波器和高通滤波器,再将两个电路的输出电压求和,就可以得到带阻滤波器。带阻滤波器可以通过高频和低频,但是中频通不过;带通滤波器,能通过中频,但是高频和低频不能通过。

理想带阻滤波器表达式为:
在这里插入图片描述

布特沃斯带阻滤波器表达式为:
在这里插入图片描述
高斯带阻滤波器表达式为:
在这里插入图片描述
带通滤波器表达式与此相反,1减带阻即可。

7.2 陷波带阻和陷波带通滤波器

陷波滤波器也用于去除周期噪声,虽然带阻滤波器也能可以去除周期噪声,但是带阻滤波器对噪声以外的成分也有衰减。而陷波滤波器主要对某个点进行衰减,对其余的成分不损失。

用陷波滤波器减少波纹模式:

w = imread('D:\数字图像处理\第三章学习\blackhole.png');
f = im2double(rgb2gray(w));       %把图像变为灰度图像
[M N] = size(f); 
[f,revertclass] = tofloat(f);     %存储输入的类,以便以后使用。
F = fft2(f);                      %傅里叶变换
S = gscale(log(1+abs(fftshift(F))));
C1 = [99 154;128 163];
H1 = cnotch('gaussian','reject', M,N,C1,5);
P1 = gscale(fftshift(H1).*(tofloat(S)));
g1 = dftfilt(f, H1);   %采用默认值 0 填充边缘,频率域滤波函数,第一个参数为原始图像,后者为二维频率域滤器
figure;
subplot(2, 2, 1), imshow(g), title('原图像');
g1 = revertclass(g1);     
C2 = [99 154;128 163;49 160;133 233;55 132;108 255;112 74];
H2 = cnotch('gaussian','reject',M,N,C2,5);
P2 = gscale(fftshift(H2).*(tofloat(S)));      %用gscale来进行将数据缩放到默认值0~255
g2 = dftfilt(f,H2);
g2 = revertclass(g2);          %revertclass 可以用于把输出转换回与 f 相同的类。
subplot(2, 3, 1), imshow(w), title('原图像');
subplot(2, 3, 2), imshow(S), title('谱');
subplot(2, 3, 3), imshow(P1), title('应用于由波纹模式导致的低频脉冲的陷波滤波器');
subplot(2, 3, 4), imshow(g1), title('滤波结果');
subplot(2, 3, 5), imshow(P2), title('用更多的滤波器消除高频“结构”噪声');
subplot(2, 3, 6), imshow(g2), title('滤波结果');

代码运行效果如下:

实验结论:在频域中,周期干扰导致很强的局部能量脉冲, 因为干扰相对处于低频,我们开始滤除接近原点的尖刺。使用下面的 cnotch 函数来做。(i)显示了加在谱上的陷波滤波,而(j)图是滤波后的结果。与(h)比较, 我们可以看到高频干扰的减少。虽然这个最终结果远不完美,但相对原始图像来说改进还是有意义的。

2010-09-05 21:32:00 zhywsh 阅读数 1061
  • OpenGL视频教程

    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染管线,得到一个猴子的模型。

    56920 人正在学习 去看看 黄棒清

 

Matlab常用图像操作

 


. 读写图像文件

1. imread

imread函数用于读入各种图像文件,如:a=imread('e:/w01.tif')

注:计算机E盘上要有w01相应的.tif文件。

2. imwrite

imwrite函数用于写入图像文件,如:imwrite(a,'e:/w02.tif',’tif’)

3. imfinfo

imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:/w01.tif')

. 图像的显示

1. image

image函数是MATLAB提供的最原始的图像显示函数(主要彩色显示图象),如:

a=[1,2,3,4;4,5,6,7;8,9,10,11,12];

image(a);

2. imshow

imshow函数用于灰度图像文件的显示,如:

i=imread('e:/w01.tif');

imshow(i);

3. colorbar

colorbar函数用显示图像的颜色条。

 

通常,颜色映象进行过调节,把数据从最小扩展到最大,也就是说整个颜色映象都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映象或者对数据的整个集合只使用当前颜色映象的一部分。

       [cmin,cmax]=caxis返回映射到颜色映象中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。比如,函数mesh(peaks) 会画出函数peaks的网格图,并把颜色轴caxis设为[-6.54668.0752],即Z的最小值和最大值。这些值之间的数据点,使用从颜色映象中经插值得到的颜色。如:

i=imread('e:/w01.tif');

imshow(i);

colorbar; 

4 .figure

figure函数用于设定图像显示窗口,如:figure(1) /figure(2)


5.imagesc(a);   caxis([-3 8]) ; colorbar;  
标尺标度从-3,到8 显示标度尺。

. 图像的变换

1. fft2

fft2函数用于数字图像的二维傅立叶变换,如:

i=imread('e:/w01.tif');

j=fft2(i);

2. ifft2

ifft2函数用于数字图像的二维傅立叶反变换,如:

i=imread('e:/w01.tif');

j=fft2(i);

k=ifft2(j);

3. 利用fft2计算二维卷积

利用fft2函数可以计算二维卷积,:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

a(8,8)=0;

b(8,8)=0;

c=ifft2(fft2(a).*fft2(b));

c=c(1:5,1:5);

利用conv2(二维卷积函数)校验, 如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

c=conv2(a,b);

. 模拟噪声生成函数和预定义滤波器

1. imnoise

imnoise函数用于对图像生成模拟噪声,如:

i=imread('e:/w01.tif');

j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声

2. fspecial

fspecial函数用于产生预定义滤波器,如:

h=fspecial('sobel');%sobel水平边缘增强滤波器

h=fspecial('gaussian');%高斯低通滤波器

h=fspecial('laplacian');%拉普拉斯滤波器

h=fspecial('log');%高斯拉普拉斯(LoG)滤波器

h=fspecial('average');%均值滤波器

. 图像的增强

1. 直方图

imhist函数用于数字图像的直方图显示,如:

i=imread('e:/w01.tif');

imhist(i);

2. 直方图均化

histeq函数用于数字图像的直方图均化,如:

i=imread('e:/w01.tif');

j=histeq(i);

3. 对比度调整

imadjust函数用于数字图像的对比度调整,如:

i=imread('e:/w01.tif');

j=imadjust(i,[0.3,0.7],[]);

4. 对数变换

log函数用于数字图像的对数变换,如:

i=imread('e:/w01.tif');

j=double(i);

k=log(j);

5. 基于卷积的图像滤波函数

filter2函数用于图像滤波,如:

i=imread('e:/w01.tif');

h=[1,2,1;0,0,0;-1,-2,-1];

j=filter2(h,i);

6. 线性滤波

利用二维卷积conv2滤波, :

i=imread('e:/w01.tif');

h=[1,1,1;1,1,1;1,1,1];

h=h/9;

j=conv2(i,h);

7. 中值滤波

medfilt2函数用于图像的中值滤波,如:

i=imread('e:/w01.tif');

j=medfilt2(i);

8. 锐化

1)利用Sobel算子锐化图像, :

i=imread('e:/w01.tif');

h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子

j=filter2(h,i);

2)利用拉氏算子锐化图像, :

i=imread('e:/w01.tif');

j=double(i);

h=[0,1,0;1,-4,0;0,1,0];%拉氏算子

k=conv2(j,h,'same');

m=j-k;

. 举例

二维傅立叶变换和二维傅立叶反变换:

i=imread('e:/w01.tif');

figure(1);

imshow(i);

colorbar;

j=fft2(i);

k=fftshift(j);

figure(2);

l=log(abs(k));

imshow(l,[]);

colorbar

n=ifft2(j)/255;

figure(3);

imshow(n);

colorbar;

 

没有更多推荐了,返回首页