形态学图像处理

  • 1 预备知识
    • 1.1 集合理论中的基本概念
    • 1.2 二值图像、集合及逻辑算子
  • 2 膨胀和腐蚀
    • 2.1 膨胀
    • 2.2 腐蚀
  • 3 膨胀与腐蚀的结合
    • 3.1 开操作和闭操作
    • 3.2 击中或击不中变换
  • 4 标记连通分量
  • 5 形态学重建
    • 5.1 通过重建进行开操作
    • 5.2 填充孔洞
    • 5.3 清楚边界物体
  • 6 灰度级形态学
    • 6.1 膨胀和腐蚀
    • 6.2 开操作和闭操作
    • 6.3 重建

“形态学”一次通常指的是生物学的某个分支,常用来处理动物和植物的形状和结构。在这里,我们在数学形态学中也同样用这个词,将之作为提取图像分量的一种工具,这些分量在表示和描述区域形状(比如边界、骨骼、凸壳)时是很有用的。我们还对形态学预处理和后处理技术很感兴趣,比如形态学滤波、细化、裁剪。本章从图像处理方法开始过渡,在这些方法中,输入和输出均为图像;过渡到图像分析方法,在这些方法中,输出试图以某种方法描述图像内容。形态学是数学工具集的基石,这个工具集用于从图像提取“内涵”。其他方法将在之后余下章节讨论和应用。

1 预备知识

1.1 集合理论中的基本概念

令Z为实整数集合。用于产生数字图像的抽样处理可以被看做把xy平面分隔成网格状,其中每个网格的中心坐标是来自笛卡尔乘积Z2中的一对元素。在集合理论的术语中。如果(x,y)是来自Z2的整数,f是分配给每个不同坐标对(x,y)的亮度值(属于实数集合R中的实数)的映射,那么函数f(x,y)被称为数字图像。如果R中的元素也是整数,那么这幅数字图像就变成了二维函数,它的坐标与幅值均为整数。

令A为Z2中的集合,A中的元素是坐标(x,y)处的像素。如果w=(x,y)是A中的元素,那么可以写为:w∈Aw\in Aw∈A所有像素坐标的集合均不属于集合A,记为Ac,由下式给出:Ac={w∣w∉A}A^c=\{w|w\notin A\}Ac={w∣w∈/​A}这个集合称为集合A的补集。除了集合的一般操作,形态学操作通常还需要两个算子,它们特别针对元素均为像素坐标的集合。集合B的反射B^定义为:B^={w∣w=−b,b∈B}\hat{B}=\{w|w=-b,b\in B\}B^={w∣w=−b,b∈B}点z=(z1,z2)对集合A的平移表示为(A)z,定义为:(A)z={c∣c=a+z,a∈A}(A)_z=\{c|c=a+z,a\in A\}(A)z​={c∣c=a+z,a∈A}

1.2 二值图像、集合及逻辑算子

数学形态学的语言和理论经常存在二值图像的两种(但是等价)观点。迄今为止,我们已经把二值图像看做x和y空间坐标的二值函数。形态学理论把二值图像看做前景(1值)像素的集合,集合的元素属于Z2。集合操作,比如集合的并集和交集,可以直接应用于二值图像集合,例如,如果A和B是二值图像,那么C=AUB仍是二值图像。这里,如果A和B中相应的像素不是前景像素就是背景像素,那么C中的这个像素就是前景像素。以第一种观点,函数C有下式给出:C(x,y)={1A(x,y)或B(x,y)为1,或者两者均为10其他C(x,y)=\left\{\begin{matrix}1 \quad A(x,y)或B(x,y)为1,或者两者均为1 \\ 0 \quad 其他 \end{matrix}\right.C(x,y)={1A(x,y)或B(x,y)为1,或者两者均为10其他​另一方面,运用集合的观点,C由下式给出:C={(x,y)∣(x,y)∈A或(x,y)∈B或(x,y)∈(A和B)}C=\{(x,y)|(x,y)\in A 或(x,y)\in B 或(x,y)\in (A和B)\}C={(x,y)∣(x,y)∈A或(x,y)∈B或(x,y)∈(A和B)}

2 膨胀和腐蚀

膨胀和腐蚀操作是形态学图像处理的基础。

2.1 膨胀

A和B是Z2中的集合,表示为A⊕B的B对A的膨胀定义为A⊕B={z∣(B^)z∩A≠ϕ}A\oplus B=\{z|(\hat{B})_z\cap A \neq \phi\}A⊕B={z∣(B^)z​∩A​=ϕ}这个公式是以B关于它的原点的映像,并且以z对映像进行平移为基础。B对A的膨胀是所有位移z的集合,这样,B^和A至少有一个元素的重叠的。根据这种解释,上式可以等价地写为A⊕B={z∣[(B^)z∩A]⊆A}A\oplus B=\{z|[(\hat{B})_z\cap A]\subseteq A\}A⊕B={z∣[(B^)z​∩A]⊆A}这里我们假定B是一个结构元,A是被膨胀的集合(图像物体)。

膨胀的应用:

>> A = imread('Fig0907(a).tif');
>> B = [0 1 0; 1 1 1; 0 1 0];
>> D = imdilate(A, B);
>> subplot(1,2,1),imshow(A),title('Original Image');
>> subplot(1,2,2),imshow(D),title('Image After Dilate');


与腐蚀不同,膨胀是一种会“增长”或“粗化”二值图像中的物体,上面我们就可以看出膨胀可以较好的连接裂缝,下面我们会看到腐蚀则会收缩或细化二值图像中的物体。

2.2 腐蚀

作为Z2中的集合A和B,表示为A⊖B的B对A的腐蚀定义为A⊖B={z∣(B)z⊆A}A\ominus B=\{z|(B)_z\subseteq A\}A⊖B={z∣(B)z​⊆A}表面上,该式指出B对A的腐蚀是一个用z平移的B包含在A中的所有点z的集合。在下面的讨论中,假定集合B是一个结构元。因为B必须包含在A中的这一陈述等价于B不与背景共享任何公共元素,故可以将腐蚀表达为如下的等价形式:A⊖B={z∣(B)z∩Ac=ϕ}A\ominus B=\{z|(B)_z \cap A^c= \phi\}A⊖B={z∣(B)z​∩Ac=ϕ}
腐蚀的应用:

>> A = imread('Fig0905(a).tif');
>> se = strel('disk', 10);
>> E10 = imerode(A, se);
>> se2 = strel('disk', 5);
>> E5 = imerode(A, se2);
>> E20 = imerode(A, strel('disk', 20));
>> subplot(2,2,1),imshow(A),title('a) Original Image');
>> subplot(2,2,2),imshow(E10),title('b) Erode By Circle With Radius 10');
>> subplot(2,2,3),imshow(E5),title('c) Erode By Circle With Radius 5');
>> subplot(2,2,4),imshow(E20),title('d) Erode By Circle With Radius 20');


从结果我们可以看出来,在图B中我们成功去掉了模板中的细线,图C中有一些引线没有去掉,因为他们的宽度大于10像素,图D中选用了太大结构元,不仅将引线去掉了,边缘的引线也被去掉了,所以无论在腐蚀还是膨胀中,选取合适大小的结构元处理会对结果有很大的影响。

3 膨胀与腐蚀的结合

3.1 开操作和闭操作

如我们所见的那样,膨胀会扩大一幅图像的组成部分,而腐蚀则会缩小一幅图像中的组成部分。这一小节我们讨论另外两个重要的形态学操作:开操作和闭操作。开操作一般会平滑物体的轮廓、断开较窄的狭颈并消除较细的突出物。闭操作同样也会平滑轮廓的一部分,但与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除较小的孔洞,填补轮廓线中的断裂。

A被B形态学开操作表示为A∘B,定义为A被B腐蚀,然后再用B膨胀腐蚀结果:A∘B=(A⊖B)⊕BA\circ B=(A\ominus B)\oplus BA∘B=(A⊖B)⊕B与开操作等价的数学表达式为:A∘B=∪{(B)z∣(B)z⊆A}A\circ B= \cup\{(B)_z|(B)_z \subseteq A\}A∘B=∪{(B)z​∣(B)z​⊆A}其中,∪{}表示花括号中所有集合的并集。这个公式有个简单的几何解释:A∘B是B在A中全匹配平移的并集。

A被B形态学闭操作表示为A∙B,指先膨胀再腐蚀:A∙B=(A⊕B)⊖BA \bullet B=(A\oplus B)\ominus BA∙B=(A⊕B)⊖B几何上,A∙B执行所有不与A重叠的B平移的补。

开操作和闭操作用工具箱函数imopen和imclose实现:

>> f = imread('FigP0936.tif');
>> se = strel('disk',10);
>> fo = imopen(f, se);
>> fc = imclose(f, se);
>> foc = imclose(fo, se);
>> subplot(2,2,1), imshow(f), title('a)Original Image');
subplot(2,2,2), imshow(fo), title('b)Open Of A');
subplot(2,2,3), imshow(fc), title('c)Close Of A');
subplot(2,2,4), imshow(foc), title('d) Close Of B');


从两种结果上就可以看出我们之前提出开操作与闭操作的特点,两个操作在不同情况下可以发挥出特定作用,比如用来去除微小噪声达到一个滤波器的效果:

>> f = imread('Fig0911(a).tif');
>> se = strel('square', 3);
>> fo = imopen(f, se);
>> foc = imclose(fo, se);
>> subplot(1,3,1), imshow(f), title('a)Original Image');
subplot(1,3,2), imshow(fo), title('b)Open First');
subplot(1,3,3), imshow(foc), title('c)Close Second');


从结果可见噪声或斑点清楚得相当干净,但是这种方法由缺点,即有些指纹纹路未被完全修复,并还有间断。这种情况并非出乎意料,因为在保持连续性的过程中未设置任何条件。

3.2 击中或击不中变换

形态学击中或击不中变换是形状检测的基本工具,通常,能够匹配一幅图像中像素的特定结构是很有用的,比如鼓励的前景像素或是线段的端点像素。击中或击不中变换对这类应用非常实用。A被B击中或击不中变换比表示为AB。这里,不像以往那样单个的元素,B是结构元对,B=(B1,B2)。击中或击不中变换用两个结构元定义:A⊗B=(A⊖B1)∩(Ac⊖B2)A\otimes B=(A\ominus B_1)\cap(A^c\ominus B_2)A⊗B=(A⊖B1​)∩(Ac⊖B2​)

击中或击不中变换应用:

>> f = imread('FigP0918.tif');
>> B1 = strel([0 0 0; 0 1 1; 0 1 0]);
>> B2 = strel([1 1 1; 1 0 0; 1 0 0]);
>> g = bwhitmiss(f, B1, B2);
>> subplot(1,2,1),imshow(f), title('a)Original Image')
>> subplot(1,2,2),imshow(g), title('b) Result Of HMT')


从结果可以看到最后得到的点是孤立的像素,该像素点表示击中结构元的中心像素(一般在重心)位置,代表该位置击中了结构元。

4 标记连通分量

迄今为止,已经讨论过的概念是为了更适用于所有单个前景(或所有的背景)像素以及和它们紧靠的相邻像素。下面考虑单个前景像素和左右前景像素集合之间重要的“中间部分”。这就引入了连通分量的概念。

如果像素p和q之间存在一条4连接通路,就称这两个前景像素为4连接的,这里包括所有前景像素。如果它们之间还存在8连接通路,就成它们为8连接的。对于任意的前景像素P,与之相连接的所有前景像素的集合被称为包含p的连通分量。

工具箱函数bwlabel计算二值图像中所有的连通分量,应用一下计算和显示图像连通分量的质心:

f = imread('FigP0918.tif');
imshow(f);title('(a)Original Image');
[L,n]=bwlabel(f);
[r,c]=find(L==3);
rbar=mean(r);
cbar=mean(c);
figure,imshow(f);title('(b)Search Centroid');
hold on
for k=1:n[r,c]=find(L==k);rbar=mean(r);cbar=mean(c);plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k',...'MarkerFaceColor','k','MarkerSize',10);plot(cbar,rbar,'Marker','*','MarkerFaceColor','w');
end


5 形态学重建

重建是一种形态学变换,包括两幅图像和一个结构元(代替单幅图像和一个结构元)。一幅图像是标记,是变换的开始点;一幅图像是模板,用于约束变换过程。结构元用来定义连通性,这里使用8连接(默认值),这意味着一下讨论的B是3×3的值为1的矩阵,中心坐标定义为(2,2)。在这一小节我们处理二值图像。

如果G是模板,F是标记,从F重建G记作RG(F),用以下迭代过程定义:
1)将标记图像F初始化为h1
2)建立结构元:B=ones(3)。
3)重复hk+1=(hk⊕B)∩G,直到hk+1=hk
标记F必须是G的子集,也就是F⊆G。

5.1 通过重建进行开操作

在形态学开操作中,腐蚀典型地去除小的物体,且随后的膨胀趋向于恢复保留的物体形状。 然而,这种恢复的精确度取决于形状和结构元之间的相似性。本节讨论的方法,通过重建进行开操作能准确地恢复腐蚀之后的物体形状。用结构元B对图像 G通过重建进行开操作可定义为 RG(G⊖B)。下面通过重建进行开操作:

f = imread('Fig0929.tif');
fe=imerode(f,ones(51,1));%竖线腐蚀
fc=imclearborder(f,8);%清除边界,2维8邻接
ff=imfill(f,'holes');%对f进行孔洞填充
fobr=imreconstruct(fe,f);%fe做标记
fo=imopen(f,ones(51,1));%竖线做开运算
subplot(3,2,1),imshow(f);title('(a)Original Image');
subplot(3,2,2),imshow(fe);title('(b)');
subplot(3,2,3),imshow(fo);title('(c)');
subplot(3,2,4),imshow(fobr);title('(d)');
subplot(3,2,5),imshow(ff);title('(e)');
subplot(3,2,6),imshow(fc);title('(f)');


图A是原始图像,图B用竖线腐蚀过的图像,图C用竖线进行开操作,图D用竖线通过重建进行的开操作,图E填充孔洞,图F清除边界的图像。

5.2 填充孔洞

形态学重建有很广的实际应用范围,每个应用的特点都取决于标记和模板图像的选择,例如,令I表示二值图像,假设我们选择标记图像F,除了图像边缘外,其余部分都为0,边缘部分设置为1-I:F(x,y)={1−I(x,y)(x,y)是I的边缘0其他F(x,y)=\left\{\begin{matrix}1-I(x,y) \quad (x,y)是I的边缘 \\ 0 \quad \quad \quad 其他\end{matrix}\right.F(x,y)={1−I(x,y)(x,y)是I的边缘0其他​然后H=[RIc(F)]cH=[R_{I^c}(F)]^cH=[RIc​(F)]c是一幅相当于I的填充了所有孔洞的二值图像。上面例子中工具箱函数imfill可以自动完成上述运算。

5.3 清楚边界物体

重建的另一种应用是清楚图像中与边缘相接触的物体。同样,关键人物仍然是选择合适的标记来达到希望的效果。假定定义标记图像F为:F(x,y)={I(x,y)(x,y)是I的边缘0其他F(x,y)=\left\{\begin{matrix}I(x,y) \quad (x,y)是I的边缘 \\ 0 \quad \quad \quad 其他\end{matrix}\right.F(x,y)={I(x,y)(x,y)是I的边缘0其他​其中,I是原始图像,然后以I作为模板图像,重建H=RI(F)H=R_I(F)H=RI​(F)得到一幅图像H,其中仅包含与边界接触的物体。上面例子中工具箱函数imclearborder自动执行以上全过程。

6 灰度级形态学

本章之前讨论的所有二值形态学运算,除了击中或击不中变换,都可以自然地扩展到灰度图像。在本节中,正如二值图像那样,我们从膨胀和腐蚀开始,他们在灰度图像是以像素邻域的最大值和最小值来定义的。

6.1 膨胀和腐蚀

用结构元b对灰度图像f的灰度进行膨胀,表示为f⊕b,定义为:(f⊕b)(x,y)=max{f(x−x′,y−y/)+b(x′,y′)∣(x′,y′)∈Db}(f\oplus b)(x,y)=max\{f(x-x',y-y/)+b(x',y')|(x',y')\in D_b\}(f⊕b)(x,y)=max{f(x−x′,y−y/)+b(x′,y′)∣(x′,y′)∈Db​}其中,Db为b的域,f(x,y)假设在f域之外为负无穷。

用结构元b对f进行灰度级腐蚀,表示为f⊖b,定义为:(f⊖b)(x,y)=min{f(x+x′,y+y′)−b(x′,y′)∣(x′,y′)∈Db}(f\ominus b)(x,y)=min\{f(x+x',y+y')-b(x',y')|(x',y')\in D_b\}(f⊖b)(x,y)=min{f(x+x′,y+y′)−b(x′,y′)∣(x′,y′)∈Db​}其中,Db为b的域,f假设在f域之外为正无穷。

灰度图像的形态学梯度定义为膨胀运算与腐蚀运算的结果之间的差值。下面我们来看灰度值形态学的腐蚀和膨胀:

>> f = rgb2gray(imread('raccoon.jpg'));
se=strel('square',3);
gd=imdilate(f,se);
ge=imerode(f,se);
morph_grad=imsubtract(gd,ge);
>> subplot(2,2,1);imshow(f,[]);title('(a)Original Image');
>> subplot(2,2,2),imshow(gd,[]);title('(b)Dilate');
>> subplot(2,2,3),imshow(ge,[]);title('(c)Erode');
>> subplot(2,2,4),imshow(morph_grad,[]);title('(d)Gradient');


膨胀会丢失一些小的细节,图像会变的更加明亮,腐蚀得到图像变的更暗,尺寸更小。

6.2 开操作和闭操作

在灰度图像中,开操作和闭操作的表达式与二值图像拥有相同的形式。用结构元b对f进行开操作,可表示为f○b,定义为:f∘b=(f⊖b)⊕bf\circ b=(f\ominus b)\oplus bf∘b=(f⊖b)⊕b其中,腐蚀和膨胀与上一小节定义相同。同样,b对f的闭操作,表示为f∙b,定义为先膨胀再腐蚀:f∙b=(f⊕b)⊖bf\bullet b=(f\oplus b)\ominus bf∙b=(f⊕b)⊖b这两个操作都有简单的几何解释。假设图像函数f(x,y)用三维表面表示,也就是说,这幅图像的强度值是xy平面上的高度值。然后,b对f的开操作可以在几何上解释为推动结构元b,使之沿表面f的下沿平移,并移过整个f的域。开操作的结果是寻找结构元滑过的f下沿上所能达到的最高点。

开运算闭运算做形态学平滑:

>> f = imread('Fig0941.tif');
subplot(3,2,1),imshow(f),title('(a)Original Image');
se=strel('disk',5);
fo=imopen(f,se);
subplot(3,2,2),imshow(f),title('(b)Open By Disk 5');
foc=imclose(fo,se);
subplot(3,2,3),imshow(foc),title('(c)Close B');
focd=imclose(f,se);
subplot(3,2,4),imshow(focd),title('(d)Close A');
foce=imopen(focd,se);
subplot(3,2,5),imshow(foce),title('(e)Open D');
fasf=f;
for i=2:5  se=strel('disk',i);  fasf=imclose(imopen(fasf,se),se);
end
subplot(3,2,6),imshow(fasf),title('(f)Open Close Alternate Filtering');


图B显示了开操作的图像 fo, 在这里,我们看到,亮区域己经被调低了(平滑),木钉上的暗条文几乎没有受影响。图C显示了开操作的闭操作 foe。现在我们注意到,暗区域已经被平滑得很好了,结果是整个图像得到全部平滑。这种过程通常叫做开-闭滤波。先开运算后闭运算构成噪声滤波器,用来平滑图像并去除噪声。图D显示了原始图像的闭操作结果。木钉上的暗条文已经被平滑掉了,主要留下了亮的细节(注意背景中的亮条文)。图E显示了这些条文的平滑和木钉表面的进一步平滑效果。最终结果是原始图像得到全部平滑。图F是交替顺序滤波,交替顺序滤波的一种形式是用不断增大的一系列结构元执行开-闭滤波,刚开始用小的结构元,增加大小,直到与图B和C中结构元的大小相同为止。交替顺序滤波与单个开-闭滤波相比,处理图像更平滑一些。

6.3 重建

形态学上灰度级重建有几种:
1)h极小值变换:标记图像是由掩膜挑选ing减去常量所得。
2)开运算重建:先腐蚀后重建。
3)闭运算重建:对图像求补、计算其开操作重建并对结果求补。
用重建去移除复杂的背景:

f = imread('Fig0944.tif');
f_obr=imreconstruct(imerode(f,ones(1,71)),f);
f_o=imopen(f,ones(1,71));
f_thr=imsubtract(f,f_obr);
f_th=imsubtract(f,f_o);
g_obr=imreconstruct(imerode(f_thr,ones(1,11)),f_thr);
g_obrd=imdilate(g_obr,ones(1,2));
f2=imreconstruct(min(g_obrd,f_thr),f_thr);
subplot(3,3,1),imshow(f),title('(a)Original Image');
subplot(3,3,2),imshow(f_obr),title('(b)Open In Rebuild');
subplot(3,3,3),imshow(f_o),title('(c)Open A');
subplot(3,3,4),imshow(f_thr),title('(d)Top Cap Operation In Rebuild');
subplot(3,3,5),imshow(f_th),title('(e)Top Cap Operation');
subplot(3,3,6),imshow(g_obr),title('(f)Rebuild B By Level');
subplot(3,3,7),imshow(g_obrd),title('(g)Dilate By Level');
subplot(3,3,8),imshow(f2),title('(h)Result');


为了消除每个键盘上方的水平反射光,利用这些反射比图像中任何文本字符都要宽的这个事实。用长水平线的结构元执行重建的开操作,重建的开操作显示于图B中。为了进行对比,图C显示了标准的开操作 。重建的开操作在提取水平的相邻键之间的背景方面的确较好。从原始图像中减去重建的开操作被称为顶帽重建 , 结果示于图D中。消除图D中键右边的垂直反射光。这可以通过用短的水平线执行重建的开操作来完成,在这个结果中(见图F),垂直的反射光不见了。但是,包括字母的垂直的细笔画也不见了。我们利用了那些已被错误消除的字母非常接近第一次膨胀(见图G)后还存在的其他字符这一事实,以 f_thr 作为模板,以 min(g_obrd,f_thr) 作为标记,图H显示了最后的结果。注意,背景上键盘的阴影和反射光都成功去除了。

数字图像处理第九章 形态学图像处理相关推荐

  1. 数字图像处理第九章——形态学图像处理

    数字图像处理第九章 数字图像处理---形态学图像处理 (一)预备知识 1.1 集合理论中的基本概念 1.2 二值图像.集合及逻辑算子 (二)膨胀和腐蚀 2.1 膨胀 2.2 结构元的分解 2.3 st ...

  2. 数字图像处理——第九章 形态学图像处理

    数字图像处理--第9章 形态学图像处理 文章目录 数字图像处理--第9章 形态学图像处理 1 基础知识 1.1 形态学图像 1.2 二值图像 2 腐蚀和膨胀 2.1 腐蚀 2.2 膨胀 3 开操作与闭 ...

  3. 数字图像处理第九章----形态学图像处理

    文章目录 1.概念 2.腐蚀与膨胀 3.开闭运算 4.顶帽与黑帽运算 5.边界提取与区域填充 6.细化 7.总结 1.概念 形态学操作:数学形态学时基于集合论的图像处理方法,最早出现在生物学的形态与结 ...

  4. 数字图像处理第九章形态学处理

    文章目录 引言 9.1预备知识 9.2腐蚀和膨胀 9.2.1腐蚀 9.2.2膨胀 9.3开操作和闭操作 9.3.1开操作 9.3.2闭操作 9.4一些基本的形态学算法 9.4.1边界提取 9.4.2孔 ...

  5. 数字图像处理——第九章 形态学处理

    文章目录 引言 9.1 一些基本的形态学集合 9.2 腐蚀和膨胀 9.3 开操作与闭操作 9.4 击中与击不中 9.5 形态学处理函数 实验部分 总结 引言 本章主要将数学形态学作为工具从图像中提取表 ...

  6. 数字图像处理知识点梳理——第九章 形态学图像处理

    文章目录 1.预备知识 2.腐蚀和膨胀 3.开操作和闭操作 4.一些基本的形态学算法 1.预备知识 数学形态学的语言是集合论. 在形态学中集合的反射和平移广泛用来表达基于结构元(SE)的操作:研究一幅 ...

  7. imopen和bwmorph_数字图像处理第九章讲义.ppt

    第九章 形态学图像处理 预备知识 膨胀与腐蚀 开操作和闭操作 击中或击不中变换 一些基本的形态学算法 灰度级形态学 第九章 形态学图像处理 第九章 形态学图像处理 预备知识 预备知识 集合论中的几个基 ...

  8. 数字图像处理——第九章(形态学图像处理)

    参考:https://blog.csdn.net/Dujing2019/article/details/90050755 参考:https://blog.csdn.net/weixin_4190739 ...

  9. 数字图像处理第九章笔记——形态学图像处理

    目录 引言 一.预备知识 1.1 平移与反射 1.2 结构元 二. 腐蚀和膨胀 2.1 腐蚀 2.2 膨胀 2.3 对偶性 2.4 python实现腐蚀和膨胀 三.开操作和闭操作 四. 击中或击不中变 ...

最新文章

  1. 脑洞:如果地府需要一个后台管理系统,你会如何设计?
  2. Struts2 - 处理一个form多个submit
  3. ffmpeg与x264有什么区别?
  4. php 7.2 兼容5.5吗,PHP5.5至PHP7.2 新特性整理
  5. 基于RadeonRays的光线追踪全局光照实现方案
  6. Spring : Spring 深入理解lombok
  7. [转] 年终回顾,为你汇总一份「前端技术清单」
  8. 开源经济模型 MAKRO
  9. Android导入第三方类库
  10. window对象小结
  11. 福晶科技与九章量子计算机,量子计算机“九章”横空出世,还要光刻机吗?12月3日,中国量子计算机“九章”横空...
  12. JSP介绍及视频教程
  13. 一张图理解对分、增长函数、打散、突破点、VC维
  14. Oracle Comment添加表备注和列备注添加和查询comment on table or culumn
  15. html语言设置图片位置,HTML中如何设置图片位置
  16. 12代酷睿笔记本有哪些不错?游匣G16体验大升级
  17. java switch基础介绍及具体使用方法
  18. Mysql CASE方法条件怎么加and或or
  19. 网页聊天窗口的自动输入内容及自动发送
  20. 你没玩过的全新版本!Win10这些骚操作你知多少

热门文章

  1. React中三元运算符的坑
  2. 美股怎么交易?有哪些美股做空交易策略?
  3. 渗透测试-中间件解析漏洞分析
  4. Project Server 2007安装配置过程图解
  5. 让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机
  6. 社区无人便利店APP开发解决方案
  7. 沿途的向阳花读书笔记
  8. Keil5启动后弹出乱码窗口
  9. Android应用的白盒加密简单介绍
  10. Android存储之SharedPreferences源码解析