OpenCV的morphologyEx函数提供了以下8种形态学操作:
该操作通过将核与图像上的每个像素进行卷积,计算核覆盖下的像素的最小值,并将结果写入输出图像中。该操作能够减小图像中的亮度和尺寸,并能够消除小的噪点。
实际应用:去除图像中的细小物体,消除图像中的噪点,分割图像中的前景和背景等。
该操作通过将核与图像上的每个像素进行卷积,计算核覆盖下的像素的最大值,并将结果写入输出图像中。该操作能够增加图像中的亮度和尺寸,并能够填充小的空洞。
实际应用:扩张图像中的前景区域,填充图像中的空洞,连接相邻的物体等。
该操作先对图像进行腐蚀操作,然后再对腐蚀后的图像进行膨胀操作,能够消除小的物体和细小的噪点,同时保持物体的大小和形状。
实际应用:去除图像中的细小物体和噪点,平滑图像中的物体边缘等。
该操作先对图像进行膨胀操作,然后再对膨胀后的图像进行腐蚀操作,能够填充小的空洞和连接相邻的物体,同时保持物体的大小和形状。
实际应用:填充图像中的空洞,连接相邻的物体,平滑图像中的物体边缘等。
该操作通过对输入图像进行膨胀和腐蚀操作,计算两个结果之间的差异,得到输入图像中物体的边缘信息。
实际应用:检测图像中物体的边缘,提取图像中物体的轮廓等。
该操作通过将原始图像减去进行开运算后的图像,得到输入图像中的小细节信息。
实际应用:检测图像中小的物体和细节,提取图像中的纹理信息等。
该操作通过将进行闭运算后的图像减去原始图像,得到输入图像中的大细节信息。
实际应用:检测图像中大的物体和细节,提取图像中的纹理信息等。
该操作通过将原始图像与两个核进行卷积,分别得到命中和不命中的像素,并将结果写入输出图像中。该操作可以用于检测图像中的特定形状。
实际应用:检测图像中的特定形状,比如角点、T形交叉等。
OpenCV的morphologyEx
函数是图像处理中常用的形态学操作函数,用于处理二值图像,通过改变结构元素的形状和大小来得到不同的结果。morphologyEx
函数提供了8种不同的操作类型,每种操作类型都有不同的参数和效果。
腐蚀操作可以使物体边界向内侵蚀,使物体变小。腐蚀操作的参数包括输入图像、输出图像、结构元素和迭代次数。在二值图像中,腐蚀操作可以用于消除小的噪点或者分离相互接触的物体。
腐蚀操作的公式如下:
d s t ( x , y ) = min ( x ′ , y ′ ) ∈ S s r c ( x + x ′ , y + y ′ ) dst(x,y) = \min_{(x',y')\in S} src(x+x',y+y') dst(x,y)=(x′,y′)∈Sminsrc(x+x′,y+y′)
其中, s r c ( x , y ) src(x,y) src(x,y)表示输入图像的像素值, d s t ( x , y ) dst(x,y) dst(x,y)表示输出图像的像素值, S S S表示结构元素, ( x ′ , y ′ ) (x',y') (x′,y′)表示结构元素中的像素坐标, x x x和 y y y分别表示像素在图像中的行和列坐标。 min \min min表示取结构元素中所有像素的最小值,作为输出像素的像素值。
膨胀操作可以使物体边界向外扩张,使物体变大。膨胀操作的参数包括输入图像、输出图像、结构元素和迭代次数。在二值图像中,膨胀操作可以用于填充物体内部的空洞或者连接相互靠近的物体。
膨胀操作的公式如下:
d s t ( x , y ) = max ( x ′ , y ′ ) ∈ S s r c ( x + x ′ , y + y ′ ) dst(x,y) = \max_{(x',y')\in S} src(x+x',y+y') dst(x,y)=(x′,y′)∈Smaxsrc(x+x′,y+y′)
其中, s r c ( x , y ) src(x,y) src(x,y)表示输入图像的像素值, d s t ( x , y ) dst(x,y) dst(x,y)表示输出图像的像素值, S S S表示结构元素, ( x ′ , y ′ ) (x',y') (x′,y′)表示结构元素中的像素坐标, x x x和 y y y分别表示像素在图像中的行和列坐标。 max \max max表示取结构元素中所有像素的最大值,作为输出像素的像素值。
开运算是先进行腐蚀操作,再进行膨胀操作。开运算的参数包括输入图像、输出图像、结构元素和迭代次数。开运算可以用于消除小的噪点、分离相互接触的物体、平滑物体的边缘等。
开运算的公式如下:
d s t = d i l a t e ( e r o d e ( s r c , S , i t e r a t i o n s ) , S , i t e r a t i o n s ) dst = \mathrm{dilate}(\mathrm{erode}(src, S, iterations), S, iterations) dst=dilate(erode(src,S,iterations),S,iterations)
继续回答上面提问的问题:
闭运算是先进行膨胀操作,再进行腐蚀操作。闭运算的参数包括输入图像、输出图像、结构元素和迭代次数。闭运算可以用于填充物体内部的空洞、连接相互靠近的物体、平滑物体的边缘等。
闭运算的公式如下:
d s t = e r o d e ( d i l a t e ( s r c , S , i t e r a t i o n s ) , S , i t e r a t i o n s ) dst = \mathrm{erode}(\mathrm{dilate}(src, S, iterations), S, iterations) dst=erode(dilate(src,S,iterations),S,iterations)
其中, s r c src src表示输入图像, d s t dst dst表示输出图像, S S S表示结构元素, i t e r a t i o n s iterations iterations表示迭代次数。
形态学梯度是通过膨胀和腐蚀操作得到的差值图像。形态学梯度的参数包括输入图像、输出图像、结构元素和迭代次数。形态学梯度可以用于检测图像中物体的边缘和轮廓。
形态学梯度的公式如下:
d s t = d i l a t e ( s r c , S , i t e r a t i o n s ) − e r o d e ( s r c , S , i t e r a t i o n s ) dst = \mathrm{dilate}(src, S, iterations) - \mathrm{erode}(src, S, iterations) dst=dilate(src,S,iterations)−erode(src,S,iterations)
其中, s r c src src表示输入图像, d s t dst dst表示输出图像, S S S表示结构元素, i t e r a t i o n s iterations iterations表示迭代次数。
礼帽操作是原图像和开运算之间的差值图像。礼帽操作的参数包括输入图像、输出图像、结构元素和迭代次数。礼帽操作可以用于检测图像中亮度变化较小的区域。
礼帽操作的公式如下:
d s t = s r c − o p e n ( s r c , S , i t e r a t i o n s ) dst = src - \mathrm{open}(src, S, iterations) dst=src−open(src,S,iterations)
其中, s r c src src表示输入图像, d s t dst dst表示输出图像, S S S表示结构元素, i t e r a t i o n s iterations iterations表示迭代次数。
黑帽操作是闭运算和原图像之间的差值图像。黑帽操作的参数包括输入图像、输出图像、结构元素和迭代次数。黑帽操作可以用于检测图像中亮度变化较大的区域。
黑帽操作的公式如下:
d s t = c l o s e ( s r c , S , i t e r a t i o n s ) − s r c dst = \mathrm{close}(src, S, iterations) - src dst=close(src,S,iterations)−src
其中, s r c src src表示输入图像, d s t dst dst表示输出图像, S S S表示结构元素, i t e r a t i o n s iterations iterations表示迭代次数。
核外部梯度是一种特殊的形态学操作,用于检测图像中特定的模式。核外部梯度的参数包括输入图像、输出图像、正结构元素、反结构元素和迭代次数。正结构元素用于表示模板中为1的像素,反结构元素用于表示模板中为0的像素。
核外部梯度的公式如下:
d s t = ( e r o d e ( s r c , S h i t , i t e r a t i o n s ) ∩ e r o d e ( ∼ s r c , S m i s s , i t e r a t i o n s ) ) c dst = (\mathrm{erode}(src, S_{hit}, iterations) \cap \mathrm{erode}(\sim src, S_{miss}, iterations))^c dst=(erode(src,Shit,iterations)∩erode(∼src,Smiss,iterations))c
其中, s r c src src表示输入图像, d s t dst dst表示输出图像, S h i t S_{hit} Shit表示正结构元素, S m i s s S_{miss} Smiss表示反结构元素, i t e r a t i o n s iterations iterations表示迭代次数, ∼ \sim ∼表示取反操作, ∩ \cap ∩表示集合交, c c c表示取补集操作。
这样,我们就对OpenCV morphologyEx函数中的8种形态学操作以及它们的公式进行了详细的介绍。