什么是开运算和闭运算,开运算和闭运算的原理
图像分割——分水岭算法
姓名:谢意远
学号:19021110366T
嵌牛导读:图像中的目标物体是连接在一起的,则分割起来很困难,分水岭分割算法经常用于处理这类问题,通常会取得比较好的效果。
嵌牛鼻子:图像分割、分水岭算法
嵌牛提问:分水岭算法具体有哪些步骤?
嵌牛正文:
一、综述
分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。而直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对象进行标注区别,再应用分水岭算法会取得较好的分割效果。基于标记控制的分水岭分割方法有以下基本步骤:
1 综述
分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对象进行标注区别,再应用分水岭算法会取得较好的分割效果。基于标记控制的分水岭分割方法有以下基本步骤:
1.计算分割函数。图像中较暗的区域是要分割的对象
2.计算前景标志。这些是每个对象内部连接的斑点像素。
3.计算背景标志。这些是不属于任何对象的要素。
4.修改分割函数,使其仅在前景和后景标记位置有极小值。
5.对修改后的分割函数做分水岭变换计算。
使用MATLAB图像处理工具箱
注:期间用到了很多图像处理工具箱的函数,例如fspecial、imfilter、watershed、label2rgb、imopen、imclose、imreconstruct、imcomplement、imregionalmax、bwareaopen、graythresh和imimposemin函数等。
2 步骤
第一步:读入色图像,将其转化成灰度图像
clc; clear all; close all;
rgb = imread('pears.png');
if ndims(rgb) == 3
I = rgb2gray(rgb);
else
I = rgb;
end
figure('units', 'normalized', 'position', [0 0 1 1]);
第2步:将梯度幅值作为分割函数
使用Sobel边缘算子对图像进行水平和垂直方向的滤波,然后求取模值,sobel算子滤波后的图像在边界处会显示比较大的值,在没有边界处的值会很小。
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I,[]), title('灰度图像')
subplot(1, 2, 2); imshow(gradmag,[]), title('梯度幅值图像')
可否直接对梯度幅值图像使用分水岭算法?
L = watershed(gradmag);
Lrgb = label2rgb(L);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(gradmag,[]), title('梯度幅值图像')
subplot(1, 2, 2); imshow(Lrgb); title('梯度幅值做分水岭变换')
直接使用梯度模值图像进行分水岭算法得到的结果往往会存在过度分割的现象。因此通常需要分别对前景对象和背景对象进行标记,以获得更好的分割效果。
第3步:标记前景对象
有多种方法可以应用在这里来获得前景标记,这些标记必须是前景对象内部的连接斑点像素。这个例子中,将使用形态学技术“基于开的重建”和“基于闭的重建”来清理图像。这些操作将会在每个对象内部创建单位极大值,使得可以使用imregionalmax来定位。
开运算和闭运算:先腐蚀后膨胀称为开;先膨胀后腐蚀称为闭。开和闭这两种运算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。开运算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;闭运算可以把比结构元素小的缺口或孔填充上,搭接短的间隔而起到连接作用。
开操作是腐蚀后膨胀,基于开的重建(基于重建的开操作)是腐蚀后进行形态学重建。下面比较这两种方式。首先,用imopen做开操作。
se = strel('disk', 20);
Io = imopen(I, se);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I, []); title('灰度图像');
subplot(1, 2, 2); imshow(Io), title('图像开操作')
接下来,通过腐蚀后重建来做基于开的重建计算。
Ie = imerode(I,se)
Iobr = imreconstruct(Ie,I);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I, []); title('灰度图像');
subplot(1, 2, 2); imshow(Iobr, []), title('基于开的重建图像')
开操作后,接着进行闭操作,可以移除较暗的斑点和枝干标记。对比常规的形态学闭操作和基于闭的重建操作。首先,使用imclose:
Ioc = imclose(Io, se);
Ic = inclose(I,se);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I, []); title('灰度图像');
subplot(2, 2, 2); imshow(Io, []); title('开操作图像');
subplot(2, 2, 3); imshow(Ic, []); title('闭操作图像');
subplot(2, 2, 4); imshow(Ioc, []), title('开闭操作');
现在使用imdilate,然后使用imreconstruct。注意必须对输入图像求补,对imreconstruct输出图像求补。IM2 = imcomplement(IM)计算图像IM的补集。IM可以是二值图像,或者RGB图像。IM2与IM有着相同的数据类型和大小。
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I, []); title('灰度图像');
subplot(2, 2, 2); imshow(Ioc, []); title('开闭操作');
subplot(2, 2, 3); imshow(Iobr, []); title('基于开的重建图像');
subplot(2, 2, 4); imshow(Iobrcbr, []), title('基于闭的重建图像');
通过比较Iobrcbr和loc可以看到,在移除小污点同时不影响对象全局形状的应用下,基于重建的开闭操作要比标准的开闭重建更加有效。计算Iobrcbr的局部极大来得到更好的前景标记。
fgm = imregionalmax(Iobrcbr);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 3, 1); imshow(I, []); title('灰度图像');
subplot(1, 3, 2); imshow(Iobrcbr, []); title('基于重建的开闭操作');
subplot(1, 3, 3); imshow(fgm, []); title('局部极大图像');
为了帮助理解这个结果,叠加前景标记到原图上。
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
It1(fgm) = 255; It2(fgm) = 0; It3(fgm) = 0;
I2 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(rgb, []); title('原图像');
subplot(2, 2, 2); imshow(Iobrcbr, []); title('基于重建的开闭操作');
subplot(2, 2, 3); imshow(fgm, []); title('局部极大图像');
subplot(2, 2, 4); imshow(I2); title('局部极大叠加到原图像');
注意到大多闭塞处和阴影对象没有被标记,这就意味着这些对象在结果中将不会得到合理的分割。而且,一些对象的前景标记会一直到对象的边缘。这就意味着应该清理标记斑点的边缘,然后收缩它们。可以通过闭操作和腐蚀操作来完成。
se2 = strel(ones(5,5));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');
subplot(2, 2, 2); imshow(fgm, []); title('局部极大图像');
subplot(2, 2, 3); imshow(fgm2, []); title('闭操作');
subplot(2, 2, 4); imshow(fgm3, []); title('腐蚀操作');
这个过程将会留下一些偏离的孤立像素,应该移除它们。可以使用bwareaopen,用来移除少于特定像素个数的斑点。BW2 = bwareaopen(BW,P)从二值图像中移除所以少于P像素值的连通块,得到另外的二值图像BW2。
fgm4 = bwareaopen(fgm3, 20);
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
It1(fgm4) = 255; It2(fgm4) = 0; It3(fgm4) = 0;
I3 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I2, []); title('局部极大叠加到原图像');
subplot(2, 2, 2); imshow(fgm3, []); title('闭腐蚀操作');
subplot(2, 2, 3); imshow(fgm4, []); title('去除小斑点操作');
subplot(2, 2, 4); imshow(I3, []); title('修改局部极大叠加到原图像');
第4步:计算背景标记
现在,需要标记背景。在清理后的图像Iobrcbr中,暗像素属于背景,所以可以从阈值操作开始。
bw =im2bw(Iobrcbr, graythresh(Iobrcbr));
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');
subplot(1, 2, 2); imshow(bw, []); title('阈值分割');
背景像素在黑色区域,但是理想情形下,不必要求背景标记太接近于要分割的对象边缘。通过计算“骨架影响范围”来“细化”背景,或者SKIZ,bw的前景。这个可以通过计算bw的距离变换的分水岭变换来实现,然后寻找结果的分水岭脊线(DL==0)。D = bwdist(BW)计算二值图像BW的欧几里得矩阵。对BW的每一个像素,距离变换指定像素和最近的BW非零像素的距离。bwdist默认使用欧几里得距离公式。BW可以由任意维数,D与BW有同样的大小。
D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(Iobrcbr, []); title('基于重建的开闭操作');
subplot(2, 2, 2); imshow(bw, []); title('阈值分割');
subplot(2, 2, 3); imshow(label2rgb(DL), []); title('分水岭变换示意图');
subplot(2, 2, 4); imshow(bgm, []); title('分水岭变换脊线图');
第5步:计算分割函数的分水岭变换
函数imimposemin可以用来修改图像,使其只是在特定的要求位置有局部极小。这里可以使用imimposemin来修改梯度幅值图像,使其只在前景和后景标记像素有局部极小。
gradmag2 = imimposemin(gradmag, bgm | fgm4);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2,2,1)imshow(bgm,[]);title('分水岭变换脊线图');
subplot(2, 2, 2); imshow(fgm4, []); title('前景标记');
subplot(2, 2, 3); imshow(gradmag, []); title('梯度幅值图像');
subplot(2, 2, 4); imshow(gradmag2, []); title('修改梯度幅值图像');
最后,可以做基于分水岭的图像分割计算。
第6步:查看结果
一个可视化技术是叠加前景标记、背景标记、分割对象边界到初始图像。可以使用膨胀来实现某些要求,比如对象边界,更加清晰可见。对象边界定位于L==0的位置。
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
fgm5 = imdilate(L == 0, ones(3, 3)) | bgm | fgm4;
It1(fgm5) = 255; It2(fgm5) = 0; It3(fgm5) = 0;
I4 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原图像');
subplot(1, 2, 2); imshow(I4, []); title('标记和对象边缘叠加到原图像');
可视化说明了前景和后景标记如何影响结果。在几个位置,部分的较暗对象与它们相邻的较亮的邻接对象相融合,这是因为受遮挡的对象没有前景标记。
另外一个有用的可视化技术是将标记矩阵作为色图像进行显示。标记矩阵,比如通过watershed和bwlabel得到的,可以使用label2rgb转换到真图像来显示。
Lrgb = label2rgb(L,'jet', 'w', 'shuffle');
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原图像');
subplot(1, 2, 2); imshow(Lrgb); title('色分水岭标记矩阵');
可以使用透明度来叠加这个伪色标记矩阵在原亮度图像上进行显示。
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原图像');
subplot(1, 2, 2); imshow(rgb, []); hold on;
himage = imshow(Lrgb);
set(himage, 'AlphaData', 0.3);
title('标记矩阵叠加到原图像');
数字图像处理
数字图像处理主要再两个领域,这里介绍空间域的处理操作。
空间域:根据图像像元数据的空间表示 f(x,y)进行处理
变换域:对图像像元数据的空间表示f(x,y)先进行某种变换,然后正对变换数据进行处理。
变换域处理一定有正变换和反变换。
空间域的处理方法有:
单波段操作 , 点运算 邻域运算
多波段操作 , 代数运算 剖面运算
对单幅图像像元进行的逐个像元计算。
直方图扩展(拉伸)
一般用于图像的整体增强
为了突出图像中感兴趣的目标或者灰度区间,抑制那些不感兴趣的灰度区域。
一般用于图像局部的灰度增强 分段拉伸
有很多方法 比如指数变换 对数变换(增强暗的部分,压缩暗的部分)
一般用于图像局部灰度增强:高斯拉伸 两边和中间压缩
平方根拉伸 暗的地方被拉伸 亮的地方被压缩
空间操作 图像裁剪【规则裁剪 不规则裁剪】 图像镶嵌
波段操作 波段提取 波段叠加
图像裁剪 根据我们的需要保留感兴趣的部分,去除其他区域。
如果不是最终的操作,此时需要尽可能比实际的研究区域略微大一点。
图像镶嵌 最大的特点是要无缝镶嵌。把多景相邻遥感影像拼成一块。
注意事项:
1、待镶嵌对图像在重叠去应该具有相似的色调、纹理等特征。
2、拼接线尽量选择在差异明显的自然地物交界处,如河流、山脊、路。
3、对拼接线两边附近的图像作匀色处理。
图像镶嵌步骤:
波段提取 从一个多波段的图像文件中提取某一个特定波段作为一个独立文件。
波段叠加 把同一个地理范围不同波段的文件合并为一个多波段文件。
求反 与 或 异或运算
二值形态学
灰度形态学
腐蚀 膨胀 开运算 闭运算
腐蚀 :是一种消除边界点、使边界向内部收缩的过程,可以用来消除小且无意义的目标物。
开运算:使用同一个结构元素对图像先腐蚀再膨胀的运算。
闭运算:使用同一个结构元素对图像先膨胀再腐蚀的运算。
腐蚀:用结构元素b对输入图像f进行腐蚀。
膨胀
开运算:先腐蚀,后膨胀
闭运算:先膨胀,后腐蚀
图像开运算和闭运算
如果您觉得本文不错,帮忙点赞哦!
一. 图像形态学处理 —— 膨胀和腐蚀
二. 开运算与闭运算:
开运算:先腐蚀后膨胀,能够消除图像区域外的小白点(噪声)。
闭运算:先膨胀后腐蚀,能够消除图像区域内的小黑点(噪声)。
为什么有了膨胀、腐蚀还要开运算闭运算呢?其实开闭运算最重要的一点就是,可以保持物体原有大小。然后一个是消除物体外部噪声(开运算)的另一个是增强物体之间连接点(闭运算)的。
三. python实现开运算和闭运算:
# Writer : wojianxinygcl@163.com
# Date : 2020.3.21
import numpy as np
# Morphology Dilate
def Morphology_Dilate(img, Dil_time=1):
H, W = img.shape
# kernel
MF = np.array(((0, 1, 0),
(1, 0, 1),
(0, 1, 0)), dtype=np.int)
# each dilate time
out = img.copy()
for i in range(Dil_time):
tmp = np.pad(out, (1, 1), 'edge')
for y in range(1, H):
for x in range(1, W):
if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) >= 255:
out[y, x] = 255
return out
# Morphology Erode
def Morphology_Erode(img, Erode_time=1):
H, W = img.shape
out = img.copy()
# kernel
MF = np.array(((0, 1, 0),
(1, 0, 1),
(0, 1, 0)), dtype=np.int)
# each erode
for i in range(Erode_time):
tmp = np.pad(out, (1, 1), 'edge')
# erode
for y in range(1, H):
for x in range(1, W):
if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) < 255*4:
out[y, x] = 0
return out
# Morphology Closing
def Morphology_Closing(img, time=1):
out = Morphology_Dilate(img, Dil_time=time)
out = Morphology_Erode(out, Erode_time=time)
return out
# Opening morphology
def Morphology_Opening(img, time=1):
out = Morphology_Erode(img, Erode_time=time)
out = Morphology_Dilate(out, Dil_time=time)
return out
四. 开闭运算的效果:
可以看到,图像开运算,消除了图像外部的噪声,图像闭运算,连通了更多的图像区域。
五. 参考内容:
① https://www.cnblogs.com/wojianxin/p/12542459.html
② https://blog.csdn.net/Ibelievesunshine/article/details/105018063
六. 版权声明:
详解什么是灰度值开运算闭运算
舱口儋趾好似闪纯
数学形态学及其二值运算
将一个几何A平移 个单位,可以描述为:
二值膨胀,也被称为 Minkowski 加法,图像 经由SE进行膨胀化的操作可以被定义为:
二值膨胀的效果如下图所示:
事实上,可以简单的将二值膨胀算法看作是一个“盖章”的过程,如下图所示:
为了更简单的了解二值膨胀算法的原理和应用,有如下示例:
与二值膨胀算法相对应的另外一种算法是二值腐蚀算法,可以认为二值腐蚀算法也是一个平移算法,只不过是向右平移,并且平移之后是一个求交集的运算。其数学表达式如下所示:
二值腐蚀的效果如下图所示:
可以将二值腐蚀也认为是一个“盖章”的过程,只不过,与膨胀不同的是,结构化要素和原始图像的边缘是一个求“交集”的过过程,边缘部分只要有“0”(动画中的白色色块)存在,则与此相重叠的部分被舍去。
与二值膨胀相比,二值腐蚀的一些应用和原理示意图如下所示:
如下图所示,更加直观地显示了腐蚀的运算过程,可以看到,腐蚀运算发生时,与结构化要素相对应的接触的部分元素,只要有0,则整个结构化要素所对应的部分全变为0
对一幅图像进行二值开运算可以描述为先进性腐蚀再进行膨胀的运算:
其实现效果如下图所示:
一些二值开运算的示例和实现效果如下图所示:
二值开运算,从效果上可以看出,总体上会在原图上移除b比结构化要素更小的部分,如下图所示:
二值开运算满足如下运算定律:
与二值开运算相对应的运算是二值闭运算,其计算过程可以描述为,先进行膨胀运算,再进行腐蚀运算,对于一副图像而言,二值闭运算总体上是一个对图像进行“放大”的方式。
实现效果如下图所示,可以看出,闭运算使得图像的边缘区域更加平滑,闭运算在图像修复上有着广泛的应用。
二值闭运算能够对图像内部小于结构化要素的空洞进行填充,如下图所示:
开运算与闭运算并不是一对互逆运算,若 表示对A取反,则满足以下关系:
形态学之闭运算
闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。
例如,在图8-17中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的闭运算),其中:
从图8-17可以看到,原始图像在经过膨胀、腐蚀后,实现了闭合内部小孔的目的。
除此以外,闭运算还可以实现前景图像的连接。例如,在图8-18中,利用闭运算将原本独立的两部分前景图像连接在一起,其中:
通过将函数cv2.morphologyEx()中操作类型参数op设置为“cv2.MORPH_CLOSE”,可以实现闭运算。其语法结构如下:
【例8.8】使用函数cv2.morphologyEx()实现闭运算。
图像处理
第三章 图像处理
输出图像的像素值仅仅由输入图像的像素值决定。
1.1 像素变换
根据像素产生输出像素,注意,这里的像素可以是多副图片的像素。
1.2 颜色变换
色图像的各通道间具有很强的相关性。
1.3 合成和映射
将前景对象从图像背景中提取出来,被称为抠图;将对象插入另一图像被称为合成。
1.4 直方图均衡化
对比度和亮度参数可以提升图像的外观,为了自动调节这两个参数,有两种方法,一种方法是寻找图像中最亮的值和最暗的值,将它们映射到纯白和纯黑,另一种方法是寻找图像的像素平均值,将其作为像素的中间灰度值,然后充满范围尽量达到可显示的值。
局部自适应直方图均衡化,对于不同的区域采用不同的均衡化方法。缺点是会产生区块效应,即块的边界处亮度不连续,为了消除这一效应,常采用移动窗口,或者在块与块之间的转换函数进行平滑插值。
1.5 应用:色调调整
点算子的常用领域是对照片的对比度和色调进行操作。
与点算子相对应的邻域算子是根据选定像素及周围的像素来决定该像素的 输出。邻域算子不仅用于局部色调调整,还用于图像平滑和锐化,图像的去噪。
邻域算子的重要概念是卷积和相关,它们都是线性移不变算子,满足叠加原理和移位不变原理。
填塞,当卷积核超出图像边界时,会产生边界效应。有多种填塞方法,0填塞,常数填塞,夹取填塞,重叠填塞,镜像填塞,延长。
2.1 可分滤波器
如果一个卷积运算可以分解为一维行向量卷积和一维列向量卷积,则称该卷积核可分离。2D核函数可以看作一个矩阵K,当且仅当K的第一个奇异值为0时,K可分离。
2.2 线性滤波器举例
最简单的滤波器是移动平均或方框滤波器,其次是双线性滤波器(双线性核),高斯滤波器(高斯核),以上均为低通核,模糊核,平滑核。对于这些核函数效果的度量采用傅里叶分析。还有Sobel算子和角点算子。
2.3 带通和导向滤波器
Sobel算子是带方向的滤波器的近似,先用高斯核平滑图像,再用方向导数(拉普拉斯算子)作用于图像,得到导向滤波器,导向具有潜在的局部性以及很好的尺度空间特性。导向滤波器常用来构造特征描述子和边缘检测器,线性结构通常被认为是类似边缘的。
区域求和表是指一定区域内所有像素值的和,又称为积分图像,它的有效计算方法是递归算法(光栅扫描算法),区域求和表用于对其他卷积核的近似,人脸检测中的多尺度特征,以及立体视觉中的差分平方和的计算。
递归滤波器称为无限脉冲响应(IIR),有时用于二维距离函数和连通量的计算,也可计算大面积的平滑计算。
3.1 非线性滤波器
中值滤波可以去除散粒噪声,它的另一个优点是保边平滑,即在滤除高频噪声时,边缘不容易被柔化。
双边滤波器思想的精髓在于,抑制与中心像素值差别较大的像素,而不是抑制固定百分比 的像素。在加权滤波器的基础上,对权重系数进行了控制,即取决于定义域核(高斯核)和值域核(与中心像素值的相似度),两者相乘得到双边滤波器核。
迭代自适应平滑核各项异性扩散。
3.2 形态学
非线性滤波常用于二值图像处理,二值图像中最常见的算子是形态学算子,将二值结构元素与二值图像卷积,根据卷积结果的阈值选择二值输出,结构元素可以是任何形状。
常见的形态学操作有膨胀,腐蚀,过半,开运算,闭运算。过半使锐利的角变得平滑,开运算和闭运算去除图像中小的点和孔洞,并使图像平滑。
3.3 距离变换
距离变换通过使用两遍光栅扫描法,快速预计算到曲线或点集的距离,包括城街距离变换和欧氏距离变换。符号距离变换是基本距离变换的扩展,计算了所有像素到边界像素的距离。
3.4 连通域
检测图像的连通量是半全局的图像操作,连通量定义为具有相同输入值的邻接像素的区域,二值或多值图像被分割成连通量形式后,对每个单独区域计算统计量,面积,周长,质心,二阶矩,可用于区域排序和区域匹配。
傅里叶变换用于对滤波器的频域特征进行分析,FFT能快速实现大尺度核的卷积。
思想:为了分析滤波器的频率特征,将一个已知频率的正弦波通过滤波器,观察正弦波变弱的程度。傅里叶变换可认为是输入信号为正弦信号s(x),经过滤波器h(x)后,产生的输出响应为正弦信号o(x)=s(x)*h(x),即两者的卷积。傅里叶变换是对每个频率的幅度和相位响应的简单罗列。傅里叶变换不仅可以用于滤波器,还能用于信号和图像。
傅里叶变换的性质:叠加,平移,反向,卷积,相关,乘,微分,定义域缩放,实值图像,Parseval定理。
4.1 傅里叶变换对
常见的傅里叶变换对,连续的和离散的。方便进行傅里叶变换。
高频成分将在降采样中导致混叠。
4.2 二维傅里叶变换
为了对二维图像及滤波器进行处理,提出了二维傅里叶变换,与一维傅里叶变换类似,只不过用向量代替标量,用向量内积代替乘法。
4.3 维纳滤波器
傅里叶变换还可用于分析一类图像整体的频谱,维纳滤波器应运而生。假定这类图像位于随机噪声场中,每个频率的期望幅度通过功率谱给出,信号功率谱捕获了空间统计量的一阶描述。维纳滤波器适用于去除功率谱为P的图像噪声的滤波器。
维纳滤波器的性质,对于低频具有 单位增益,对于高频,具有减弱的效果。
离散余弦变换(DCT)常用于处理以块为单位的图像压缩,它的计算方法是将以N为宽度的块内的像素与一系列不同频率的余弦值进行点积来实现。
DCT变换的实质是对自然图像中一些小的区域的最优KL分解(PCA主成分分析的近似),KL能有效对信号去相关。
小波算法和DCT交叠变种能有效去除区块效应。
4.4 应用:锐化,模糊,去噪
锐化和去噪声能有效增强图像,传统的方法是采用线性滤波算子,现在广泛采用非线性滤波算子,例如加权中值和双边滤波器,各向异性扩散和非局部均值,以及变分方法。
度量图像去噪算法效果时,一般采用峰值信噪比(PNSR),结构相似性(SSIM)索引。
迄今为止所研究的图像变换输出图像大小均等于输入图像的大小,为了对不同分辨率的图像进行处理,比如,对小图像进行插值使其与电脑的分辨率相匹配,或者减小图像的大小来加速算法的执行或节省存储空间和传输时间。
由于不知道处理图像所需的分辨率,故由多幅不同的图像构建图像金字塔,从而进行多尺度的识别和编辑操作。改变图像分辨率较好的滤波器是插值滤波器和降采样滤波器。
5.1 插值
为将图像变大到较高分辨率,需要用插值核来卷积图像,二次插值常用方法是双线性插值,双三次插值,窗函数。窗函数被认为是品质最高的插值器,因为它既可以保留低分辨率图像中的细节,又可以避免混叠。
5.2 降采样
降采样是为了降低图像分辨率,先用低通滤波器卷积图像,避免混叠,再保持第r个样例。常用的降采样滤波器有线性滤波器,二次滤波器,三次滤波器,窗余弦滤波器,QMF-9滤波器,JPEG2000滤波器。
5.3 多分辨率表示
通过降采样和插值算法,能够对图像建立完整的图像金字塔,金字塔可以加速由粗到精的搜索算法,以便在不同的尺度上寻找物体和模式,或进行多分辨率融合操作。
计算机视觉中最有名的金字塔是拉普拉斯金字塔,采用大小为2因子对原图像进行模糊和二次采样,并将它存储在金字塔的下一级。
5.4 小波变换
小波是在空间域和频率域都定位一个信号的滤波器,并且是在不同层次的尺度上定义的。小波可以进行多尺度有向滤波和去噪。与常规的金字塔相比,小波具有更好的方向选择性,并提供了紧致框架。
提升小波被称为第二代小波,很容易适应非常规采样拓扑,还有导向可移位多尺度变换,它们的表述不仅是过完备的,而且是方向选择的。
5.5 应用:图像融合
拉普拉斯金字塔的应用,混合合成图像。要产生混合图像,每个原图像先分解成它自己的拉普拉斯金字塔,之后每个带被乘以一个大小正比于金字塔级别的平滑加权函数 。最简单的方法是建立一个二值掩膜图像,根据此图像产生一个高斯金字塔,再将拉普拉斯金字塔和高斯掩膜,这两个带权金字塔的和产生最终图像。
相对于点操作改变了图像的值域范围,几何变换关注于改变图像的定义域。原先采用的方法是全局参数化2D变换,之后的注意力将转向基于网格的局部变形等更多通用变形。
6.1 参数变换
参数化变换对整幅图像进行全局变换,其中变换的行为由少量的参数控制,反向卷绕或反向映射的性能优于前向卷绕,主要在于其能够避免空洞和非整数位置重采样的问题。而且可以用高质量的滤波器来控制混叠。
图像卷绕问题可形式化为给定一个从目标像素x'到原像素x的映射来重采样一副原图像。类似的反向法应用场合有光流法预测光流以及矫正透镜的径向畸变。
重采样过程的插值滤波器有,二次插值,三次插值,窗插值,二次插值追求速度,三次插值和窗插值追求视觉品质。
MIP映射是一种纹理映射的快速预滤波图像工具。
MIP图是标准的图像金字塔,每层用一个高质量的滤波器滤波而不是低质量的近似,重采样时,需要预估重采样率r。
椭圆带权平均滤波器(EWA),各向异性滤波,多通变换。
有向二位滤波和重采样操作可以用一系列一维重采样和剪切变换来近似,使用一系列一维变换的优点是它们比大的,不可分离的二位滤波核更有效。
6.2 基于网格扭曲
为了获得更自由的局部变形,产生了网格卷绕。稀疏控制点,稠密集,有向直线分割,位移场的确定。
6.3 应用:基于特征的形态学
卷绕常用于改变单幅图像的外观以形成动画,也可用于多幅图像的融合以产生强大的变形效果,在两幅图像之间进行简单的渐隐渐显会导致鬼影,但采用图像卷绕建立了良好的对应关系,相应的特征便会对齐。
用一些优化准则明确表达想要变换的目标,再找到或推断出这个准则的解决办法。正则化和变分法,构建一个描述解特性的连续全局能量函数,然后用稀疏线性系统或相关迭代方法找到最小能量解,贝叶斯统计学对产生输入图像的有噪声的测量过程和关于解空间的先验假设进行建模,通常用马尔科夫随机场进行编码。常见示例有散列数据的表面插值,图像去噪和缺失区域恢复,将图像分为前景和背景区域。
7.1 正则化
正则化理论试图用模型来拟合严重欠约束解空间的数据。即用一个平滑的表面穿过或是靠近一个测量数据点集合的问题。这样的问题是病态的和不适定的。这样由采样数据点d(xi,yi)恢复完整图像f(x,y)的问题被称为逆问题。
为了定义平滑解,常在解空间上定义一个范数,对于一维函数,函数一阶导数的平方进行积分,或对函数二阶导数的平方进行积分,这种能量度量是泛函的样例,是将函数映射到标量值的算子,这种方法被称为变分法,用于度量函数的变化(非平滑性)。
7.2 马尔科夫随机场
7.3 应用:图像复原