D4(p,q)=∣x−s∣+∣y−t∣D8(p,q)=max(∣x−s∣,∣y−t∣)上面三者分别是像素点p,q 的欧氏距离(欧拉距离)、城区距离和棋盘距离。
如果把p,q 的坐标视为列向量,那么上面三者还分别表示p,q 的 二范数、一范数以及无穷范数。
更一般的,有 闵可夫斯基距离 定义如下:
Dw(p,q)=(∣x−s∣w+∣y−t∣w)1/w
距离变换
对图像区域中的点进行距离变换后,变换得到的结果应正比于该点到区域边界的最近距离。
距离变换(Distance Transformation,DT)是一种特殊的变换,它将一副二值图像变换为了灰度图像。
给定一副W×H 的二值图像,设其边界集合B 已知。则距离图是一个尺寸为W×H 的矩阵,矩阵中每一个元素(像素)p(i,j) 的值为DT(p)。
下面给出一种基于迭代方法的距离图计算:
首先初始化距离图,此时迭代指数t=0:
DT(0)(p)={0,∞,p∈Bp∈/B
区域与边界
图像读取与显示|MATLAB
1 2 3 4 5 6 7 8 9 10 11
| img = imread('文件路径') img = double(imread('文件路径')) img = im2double(imread(‘文件路径’))
imshow(img) imshow(img,[]) imagesc(img),colormap(gray(256))
|
其他
人类视觉系统
人眼的光感知器分为 锥状体(Cones) 和 杆状体(Rods).
锥状体对颜色高度敏感,锥状体视觉又被称为 明视觉 或 亮视觉;
杆状体对低光照度敏感,例如白天色彩鲜艳的物体在夜晚却没有颜色这种现象,称为 暗视觉 或 微光视觉。
亮度适应现象: 视觉系统不能同时在一个范围内工作,其可以同时辨别的不同强度级别的总范围与整个适应范围相比很小。
**亮度适应水平:**对于给定条件,视觉系统当前的灵敏度水平。
图像内插
内插 通常在图像的放大、缩小、旋转和几何校正等任务中使用;内插是用已知数据来估计未知位置的值的过程
图像放大
最近邻内插
双线性内插
v(x,y)=ax+by+cxy+d
双三次内插
v(x,y)=i=0∑3j=0∑3aijxiyi
是商业图像编辑程序,如Adobe Photoshop
,的标准内插方法
图像坐标变换
灰度变换
对于空间域的处理,定义有表达式:
g(x,y)=T[f(x,y)]
其中,T(⋅)是在领域内对f进行处理的算子,可以应用于单个像素,也可以是一组像素。
当g只依赖于单个像素时,T也被称作灰度级映射函数。
此时,可将上述表达式简化为:s=T(r)。r、s分别是处理前后的像素值。
局部处理
图像反转
s=L−1−r
- 对灰度级为[0,L−1]的图像进行反转(也叫 反色或负片)
- 可用于增强图像暗色区域的白色或灰色细节
线性变换
s=kr+b
- 拉伸:当斜率∣k∣>1,经过线性变换的图像的特定灰度段得到拉伸,分布空间更宽。
- 挤压:当斜率∣k∣<1 ,经过线性变换的图像的灰度分布被挤压在更窄的空间中。
- 反色:斜率k=−1 ,截距b=255时,达到反色的效果。
通常来说,我们可以通过线性变换进行图像的归一化( min-max
法),即:
s=rmax−rminr−rmin
在 MATLAB 中也可以轻松实现:
1 2 3 4
| B = im2double(I); Bmax = max(max(B)); Bmin = min(min(B)); new_I = (B-Bmin)/(Bmax-Bmin);
|
对数变换
s=clog(1+r)
式中,c是一个常数,且假定有r≥0。
- 可将输入值范围较窄的低灰度值映射为范围较宽的灰度级,对亮区压缩,暗区扩展,方便观察暗区的细节
幂律变换(伽马变换)
s=crγ
考虑到偏移情况,有时也定义为:s=c(r+ε)γ.
γ<1提高灰度级,在正比函数上方,使图像变亮
γ>1降低灰度级,在正比函数下方,使图像变暗
在MATLAB中,imadjust()
函数可以帮助调整图像的强度值或颜色图,以实现灰度变换。
具体如下:
1
| J = imadjust(I,[low_in high_in],[low_out high_out],gamma)
|
把原始图像中的小于 low_in
的像素值映射到 low_out
。把大于 high_in
的像素值映射到 high_out
。gamma
则是伽马变换中的参数。
而 [low_in, high_in]
除了手动限制以外,可以由 stretchlim(I,Tol)
根据 Tol
的最低与最大对比度返回。(默认值: Tol = [0.01, 0.99]
)
此外,还有:
1
| imadjust(I) == imadjust(I, stretchlim(I,[0.01,0.99]), [0,1], 1)
|
分段线性阶梯量化
全局处理
定义 灰度直方图 :横坐标表示灰度值,纵坐标表示图像中具有该灰度值的像素的个数。
直方图均衡化
在MATLAB中:
imhist()
函数可以用于显示一幅图的直方图;
histeq()
函数可以直接对一幅图进行直方图均衡化.
直方图均衡化是将原图的直方图通过变换函数修整为均匀的直方图,然后按均衡直方图修整原图像。
直方图均衡化是一种典型的通过对图像的直方图进行修正来获得图像增强效果的自动方法。
sk=T(rk)=(L−1)j=0∑kpr(rj)=MNL−1j=0∑knj
其中,nk表示灰度值为rk的像素点个数,pk(rk)为归一化图像直方图,有rk∈[0,L−1],k=0,1,...,L−1.
一般地,我们再将结果进行处理,有sk←[sk],即四舍五入取整(保证在[0,L−1]内),进而再计算ps(sk)。
ps(sk)即是均衡化之后的直方图。
直方图规定化(直方图匹配)
直方图规定化:把直方图调整成尽可能满足我们期望的分布的方法
设原始图像的灰度概率密度函数为pr(r),目标图像的为pZ(Z),则有:
S=T(r)=∫0rpr(r)drV=G(Z)=∫0ZpZ(Z)dZZ=G−1(V)
因此,其主要思想就是找到这样的变换函数G.
对于离散点,表达式如下:
sk=T(rk)=(L−1)j=0∑kpr(rj)sk=G(zq)=(L−1)i=0∑qpz(zi)zq=G−1(sk)
一般地,我们不需要求反函数,只需将有限个点均计算出来后存放在一张表中,最后作映射即可。
其中,对于G(zq),我们同样可以要求有G(zq)←[G(zq)],即四舍五入取整(保证在[0,L−1]内),进而得到规定化之后的直方图。
直方图统计量
空间滤波
使用空间模板进行的图像处理,被称为空间滤波。模板本身被称为空间滤波器。
在数学上,有着相关和卷积的概念,特别地,关于一元函数的卷积,下面列出的本站文章也详尽阐述。
此处针对图像,我们引入二元函数的相关和卷积:
(f⋆g)(x,y)=s=−a∑at=−b∑bf(s,t)g(x+s,y+t)(f∗g)(x,y)=s=−a∑at=−b∑bf(s,t)g(x−s,y−t)
(f∗G)即卷积计算相当于将G旋转180度得到的G′与f进行互相关计算,即(f⋆G′)
其中,相关的计算可以简述为:对应加权求和并平滑,示意图如下:
通常,图像滤波则是指对一个图像f(x,y)应用特定的算子G(s,t)对其进行相关计算而得到.
但一般来说,我们还是把算子称作卷积核 ,这是因为卷积计算拥有分配律等等优良性质,所以我们再进行空域滤波时,我们先将算子旋转180度再与图像进行卷积,因为等效于算子直接与图像进行相关计算。
可以通过imfilter()
进行滤波,而fspecial()
函数提供有常见的滤波器(又称算子、卷积核、模板等)
平滑|低通滤波
作用:减弱或消除图像中的高频率分量,可用于消除图像中的噪声。
盒式核
高斯核
G(s,t)=Ke−2σ2r2
其中,r=(s2+t2)1/2.
统计排序滤波|非线性
中值滤波器 对椒盐噪声有着优秀的降噪能力
最大值滤波器
最小值滤波器
锐化|高通滤波边缘检测
作用:减弱或消除图像中的低频率分量,可使图像反差增加,边缘明显。
二阶导数|Laplace
g(x,y)=f(x,y)+c[∇2f(x,y)]
其中,有:
∇2f∂x2∂2f∂y2∂2f=∂x2∂2f+∂y2∂2f=f(x+1,y)+f(x−1,y)−2f(x,y)=f(x,y+1)+f(x,y−1)−2f(x,y)
由此得到拉普拉斯核:
MATLAB中的使用
1 2 3 4 5 6
| lap_H = [-1,-1,-1;-1,8,-1;-1,-1,-1]; img_lap = imfilter(img,lap_H);
|
梯度|Sobel
∇f=[gx,gy]T=[∂x∂f,∂y∂f]T∣∣∇f∣∣=M(x,y)=gx2+gy2≈∣gx∣+∣gy∣
Sobel核
MATLAB中的使用
1 2 3 4 5 6
| sobel_H = [-1,-2,-1;0,0,0;1,2,1]; img_sobel = abs(imfilter(img,sobel_H))+abs(imfilter(img,sobel_H'));
|
其他
混合空间增强
此处以《数字图像处理》(第四版)中,人体骨骼处理(图3.57)为例子,根据书本中边缘增强的基本思想进行复现。
其基本思路如下图所示:
于是我们通过以下matlab代码进行复现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| close all;clear;clc; img = im2double(imread('bonescan.tif'));
lap_H = [-1,-1,-1;-1,8,-1;-1,-1,-1]; img_lap = imfilter(img,lap_H);
img_lap_gray= (img_lap-min(img_lap(:)))./max(img_lap(:))*255;
img_sobel = abs(imfilter(img,fspecial('sobel')'))+... abs(imfilter(img,fspecial('sobel')));
box_H = 1/25*ones(5,5); img_box = imfilter(img_sobel,box_H);
img_st = immultiply(img_lap,img_box);
img_gamma = imadjust(img+img_st,[0 1],[0 1],0.5);
figure(1) subplot(1,3,1),imshow(img),title('原图') subplot(1,3,2),imagesc(img_lap_gray),colormap(gray),axis equal,axis tight,axis off,title('拉普拉斯核处理')
subplot(1,3,3),imshow(img+img_lap),title('原图+拉普拉斯') figure(2) subplot(1,3,1),imshow(img_sobel),title('sobel梯度处理') subplot(1,3,2),imshow(img_box),title('盒式滤波器平滑') subplot(1,3,3),imshow(img+img_box),title('原图+sobel平滑') figure(3) subplot(1,3,1),imshow(img_st),title('边缘增强/Laplace与平滑sobel相乘') subplot(1,3,2),imshow(img+img_st),title('原图+增强') subplot(1,3,3),imshow(img_gamma),title('γ=0.5幂律变换')
|
频率滤波
为什么要在频率域研究图像滤波?
可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通
滤波在频率域更为直观,它可以解释空间域滤波的某些性质
可以在频率域指定滤波器,做反变换,然后在空间域使用结果滤波器作为空间域滤波器的指导
一旦通过频率域试验选择了空间滤波,通常实施都在空间域进行
卷积定理:
f(x,y)⊗g(x,y)⇔F(u,v)G(u,v)
注:此处列出的是连续函数的卷积定理。式中,⊗是卷积符号
于是有基本的频域滤波公式:
g(x,y)= Real{I−1[H(u,v)F(u,v)]}
其中,I−1是IDFT.
基本滤波步骤
已知一幅大小为M×N的输入图像f(x,y)
使用零填充、镜像填充、复制填充,形成大小为P×Q的填充图像,P=2M,Q=2N
将fP(x,y)乘以(−1)x+y,使傅里叶变换位于P×Q大小的频率矩形中心
计算步骤 3 得到的图像的DFT,即F(u,v)
构建一个实对称滤波器传递函数H(u,v),其大小为P×Q ,中心在(P/2,Q/2)
采用对应像素相乘得到G(u,v)=H(u,v)F(u,v),即G(i,k)=H(i,k)F(i,k)
计算G(u,v)的IDFT得到滤波后的图像GP(x,y)={real∣I−1[G(u,v)]}(−1)x+y
从GP(x,y)的左上象限提取一个大小为M×N的区域,得到与输入图像大小相同的滤波后结果g(x,y)
同态滤波
陷波滤波
HNR(u,v)=k=1∏QHk(u,v)H−k(u,v)
周期干扰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| close all;clear;clc; img = double(imread("cassini-interference.tif")); figure subplot(2,2,1);imagesc(img),axis equal,axis tight,axis off,colormap(gray),title('原图') IMG = fftshift(fft2(img)); subplot(2,2,2);imagesc(log(1+abs(IMG))),axis equal,axis tight,axis off,colormap(gray),title('频谱') [M,N] = size(img); H = ones(M,N); H([1:M/2-15],[N/2-2:N/2+2]) = 0; H([M/2+15:M],[N/2-2:N/2+2]) = 0; subplot(2,2,3);imagesc(H),axis equal,axis tight,axis off,colormap(gray),title('滤波函数') NEW_IMG = IMG.*H; new_img = real(ifft2(fftshift(NEW_IMG))); subplot(2,2,4);imagesc(new_img),axis equal,axis tight,axis off,colormap(gray),title('结果') figure model = real(ifft2(fftshift(IMG.*(1-H)))); subplot(1,2,1);imagesc(1-H),axis equal,axis tight,axis off,colormap(gray),title('提取的带通滤波函数') subplot(1,2,2);imagesc(model),axis equal,axis tight,axis off,colormap(gray),title('干扰模式')
|
图像复原
图像复原技术的主要目的是以某种预定义的方式来改进图像。
图像复原利用退化现象的先验知识来复原已退化的图像。
复原技术主要是对退化建模并应用逆过程来恢复原图像。
估计退化函数的几种方法:观察法、试验法、数学建模法
实验证明,当退化模型的噪声较小时即轻度降质时,采用逆滤波复原方法可以获得较好的结果。逆滤波与半径范围有关。根据情况分析,不是越大和越小越好。
维纳滤波|最小均方误差滤波:通过在滤波过程中调节K值以得到准最佳结果
中值滤波器 降低随机噪声,模糊度小,对椒盐噪声效果显著
最大值滤波器 对胡椒噪声效果极好
最小值滤波器 对盐粒噪声效果极好
中点滤波器 对高斯和均匀噪声效果极好
彩色图像处理
光度学
发光强度 从光源流出的能量总量,通常用瓦特(W)来度量
光通量 观察者从光源感受到的能量,单位为流明数(lm)
亮度 光感知的主观描述子,体现了强度的无色概念, 描述彩色感觉的参数之一
照度 被光线照射的表面上的照度用照射在单位面积上的光通量来衡量,单位是lx(勒[克斯],也有 用lux的)
- 1 lx=1 lm/m2
彩色模型
RGB |红绿蓝
CMY/CMYK |青深红黄+黑
运用在大多数在纸上沉积彩色颜料的设备,如彩色打印机和复印机
HSI 模型
色调H:描述的一种纯色(纯黄色、 纯橙色或纯红色)的颜色属性
饱和度S:度量纯色被白光稀释的程度
亮度I:主观描述子,实际不可度量,体现了无色的强度概念,并且 是描述颜色感觉的关键因子之一
伪彩色处理
伪彩色图像处理:按照规定的准则对灰度值赋予颜色的处理。
伪彩色这个词是用于区分对单色图像赋予彩色的处理和对真彩色图像赋予彩色的处理。
假彩色的主要应用是可视化和解释单幅图像或一序列图像中的灰度事件。
灰度分层与彩色编码
以 焊接的 X 射线图像 为例,设定两个分层进行彩色编码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| close all;clear;clc; img = double(imread("weldXray.tif")); [h,w] = size(img); new_img = zeros(h,w,3); for i=1:h for j=1:w if img(i,j)<255 new_img(i,j,1)=0; new_img(i,j,2)=64/255; new_img(i,j,3)=115/255; else new_img(i,j,2)=1; new_img(i,j,1)=1; end end end figure subplot(1,2,1),imagesc(img),axis equal,axis tight,axis off,colormap(gray),title('原图'); subplot(1,2,2),imagesc(new_img),axis equal,axis tight,axis off,title('彩色编码');
|
彩色边缘检测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| close all;clear;clc; img = im2double(imread("lenna-RGB.tif"));
h1 = [-1 -2 -1; 0 0 0; 1 2 1]; h2 = [-1 0 1; -2 0 2; -1 0 1];
R = img(:,:,1);G = img(:,:,2);B = img(:,:,3); Rx = imfilter(R,h1,'replicate'); Ry = imfilter(R,h2,'replicate'); Gx = imfilter(G,h1,'replicate'); Gy = imfilter(G,h2,'replicate'); Bx = imfilter(B,h1,'replicate'); By = imfilter(B,h2,'replicate'); gxx = Rx.^2+Gx.^2+Bx.^2; gyy = Ry.^2+Gy.^2+By.^2; gxy = Rx.*Ry+Gx.*Gy+Bx.*Gy; A = 0.5.*(atan(2.*gxy./(gxx-gyy+eps))); G1 = 0.5.*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2.*gxy.*sin(2*A)); A = A + pi/2; G2 = 0.5.*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2.*gxy.*sin(2*A)); G1 = G1.^0.5; G2 = G2.^0.5; RGB_transf = max(G1,G2); R_sobel = sqrt(Rx.^2+Ry.^2); G_sobel = sqrt(Gx.^2+Gy.^2); B_sobel = sqrt(Bx.^2+By.^2); RGB_sobel = R_sobel+G_sobel+B_sobel;
figure subplot(2,2,1),imagesc(img),axis equal,axis tight,axis off,colormap(gray),title('原图'); subplot(2,2,2),imagesc(RGB_transf),axis equal,axis tight,axis off,colormap(gray),title('RGB空间直接梯度'); subplot(2,2,3),imagesc(RGB_sobel),axis equal,axis tight,axis off,colormap(gray),title('三分量单独求梯度'); subplot(2,2,4),imagesc(abs(RGB_transf-RGB_sobel)),axis equal,axis tight,axis off,colormap(gray),title('作差对比');
|
形态学处理
腐蚀
去掉小于结构元素的物体,选择不同大小的结构元素,可以去掉大小不同的物体
如果两物体之间有细小的连通,当结构元素足够大时,可以将物体分开
膨胀
把图像周围的背景点合并到物体中。如果两个物体距离比较近,通过膨胀可能连通在一起
对于填补图像分割后物体中的空洞十分有用。
开运算
先腐蚀再膨胀,平滑了轮廓,断开了细连线,删除了细凸起部分
闭运算
先膨胀再腐蚀,连接了狭窄的断点,填充了细长的沟槽和小于结构元的目标
1 2 3 4 5 6 7
| SE = sterl('disk',20);
new_I = imerode(I,SE); new_I = imdilate(I,SE); new_I = imopen(I,SE); new_I = imclose(I,SE);
|
图像分割
图像分割准则:不连续性(点/线/边缘检测)和相似性(阈值处理、图像分割)
不连续性
点、线、边缘检测的思想和方法
a) 点检测:一阶/二阶导数,孤立点:Laplacian核
b) 线检测:带有方向性的核函数
c) 边缘检测:步骤、常用的边缘检测算子(梯度算子(如Sobel、prewitt、Roberts)、LoG核、canny算子)
高斯拉普拉斯函数LoG:
∇2G(x,y)=(σ4x2+y2−2σ2)e−2σ2x2+y2
相似性|阈值处理
阈值处理有:全局阈值、局部阈值(可变阈值:动态阈值或自适应阈值)、多阈值
全局阈值
- 初始化一个阈值T
- 用T分割出G1、G2
- 计算G1、G2的平均灰度值m1、m2
- 更新阈值T←21(m1+m2),并循环步骤2到4,直到阈值收敛到精度ΔT内为止
Otsu算法
- 计算输入图像的归一化直方图pi,i=0,1,..,L−1
- 计算全局灰度均值mG
- 在[0,L−1]灰度范围内选择阈值k,进行如下处理:
- 根据阈值,将图像分为C1,C2两类(C1中的像素点的灰度值在0~k之间);
- 计算C1的概率P1;
- 计算C1的灰度均值m1=m;
- 计算类间方差σB=P1(m1−mG)2+P2(m2−mG)2=P1(1−P1)(mGP1−m)2.
- 最优化最大类间方差σB,找到最优参数k∗.
k∗=arg0≤k≤L−1maxσB(k)
其他分割算法
- 区域生长
- 区域分离和聚合
- k均值聚类分割
- SLIC/Ncut 超像素分割
- 形态学分水岭分割
参考资料
- 《数字图像处理》(第四版),冈萨雷斯[美] 著
- Java基础图像处理之混合空间增强 ,勇者无敌,博客园
数字图像及其基础处理|Image Processing