OpenCV4 (C++) - Morfología (erosión, dilatación)


1. Corrosión (erosión)

OpenCV 4 proporciona la función erode() para la erosión de imágenes.

void cv::erode(src, dst, kernel, anchor, iterations, borderType, borderValue)

src:输入图像。
dst:输出图像,与输入图像具有相同的大小和类型。
kernel:腐蚀操作的结构元素。可以自己定义,也可以用getStructuringElement()函数生成。
anchor:结构元素的锚点位置,默认为 (-1, -1),表示位于结构元素的中心。
iterations:指定腐蚀操作的迭代次数,默认为 1。
borderType:图像边框的处理方式,默认为 BORDER_DEFAULT。
borderValue:默认使用边界不变外推法时的边界值。当边框类型为 BORDER_CONSTANT 时,指定边框的固定值,默认为 0。


cv::Mat cv::getStructuringElement(int  shape,
                              Size  ksize,  // 结构元素的尺寸大小
                              Point  anchor = Point(-1,-1)  // 中心点的位置,默认参数为结构元素的几何中心点
                              )
shape:结构元素的种类: 
	MORPH_RECT(简记:0) —— 矩形结构元素,所有元素都为1
	MORPH_CROSS(简记:1)—— 十字结构元素,中间的列和行元素为1
	MORPH_ELLIPSE(简记:2) —— 椭圆结构元素,矩形的椭圆内接元素为1

El código es el siguiente (ejemplo):

	//cv::Mat image = cv::imread("C:/Users/Opencv/temp/wz.png",cv::IMREAD_GRAYSCALE);
	cv::Mat image = cv::imread("C:/Users/Opencv/temp/black.png", cv::IMREAD_GRAYSCALE);
	cv::Mat erodeImage;

	cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
	cv::erode(image, erodeImage, kernel);

Nota: Erosión significa literalmente reducir el contorno, pero la función de erosión solo apunta a píxeles distintos de 0 en la imagen. Por lo tanto, si la imagen se basa en 0 píxeles como fondo, luego de la operación de corrosión, verá que el contenido de la imagen se vuelve más delgado; si la imagen se basa en 255 píxeles como fondo, luego de la operación de erosión, verás que el contenido de la imagen se vuelve más fino.

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

2. dilatar

La expansión de la imagen y la erosión de la imagen son procesos opuestos. OpenCV 4 proporciona la función dilatar () para la expansión de la imagen. El prototipo de función es el mismo que erosionar.
  También tenga en cuenta que si la imagen se basa en 0 píxeles como fondo, luego de la operación de expansión verá que el contenido de la imagen se vuelve más grueso; si la imagen tiene 255 píxeles como fondo, luego de la operación de expansión verá Verás que el contenido de la imagen se vuelve más grueso.

  Resumen: La corrosión y la expansión en conceptos convencionales están sobre un fondo de 0 píxeles (negro).

3. Operaciones morfológicas

La erosión y la dilatación son tipos de operaciones de morfología de imágenes y se pueden combinar de muchas maneras. Como operaciones de apertura y cierre comunes:

(1) La corrosión puede eliminar áreas pequeñas de ruido, pero también reducirá el área del área de la imagen principal; por lo tanto, la operación de expansión se puede realizar después de la operación de corrosión para compensar la reducción del área del dominio conectado más grande causada por corrosión. Esta operación se llama operación de apertura.

(2) La expansión puede expandir el área de cada región, llenar agujeros más pequeños y conectar dos dominios conectados adyacentes, pero también aumentará el área de ruido; por lo tanto, la operación de expansión solo se puede realizar y luego La operación de corrosión se puede realizar para reducir el ruido causado por la operación de expansión, causado por la expansión de los límites y áreas del dominio conectado. Esta operación se llama operación cerrada.

Además, las operaciones morfológicas incluyen gradiente (que describe el límite del objetivo), operación de sombrero de copa (la diferencia entre la imagen original y el resultado de la operación de apertura, utilizada para separar parches que son más brillantes que sus vecinos) y operación de sombrero negro. (la diferencia entre la imagen original y el resultado de la operación de apertura). La diferencia entre los resultados de las operaciones cerradas se usa a menudo para separar parches que son más oscuros que los puntos adyacentes) y transformación de acierto (encontrar estructuras que son exactamente iguales). como elementos estructurales).


OpenCV 4 proporciona la función morphologyEx() para cubrir estas operaciones morfológicas
void cv::morphologyEx(InputArray  src, 
					OutputArray  dst,
					int  op,  // 形态学操作类型的标志
					InputArray  kernel,  // 结构元素,可以自己生成,也可以用getStructuringElement()函数生成
					anchor = Point(-1,-1),  // 中心点在结构元素中的位置,默认参数为结构元素的几何中心点
					int  iterations = 1,
					int  borderType = BORDER_CONSTANT,
					const Scalar &  borderValue = morphologyDefaultBorderValue() 

其中第三个参数形态学操作类型的标志:
标志参数	       简记	  作用
MORPH_ERODE  	0	图像腐蚀
MORPH_DILATE	1	图像膨胀
MORPH_OPEN	    2	开运算
MORPH_CLOSE	    3	闭运算
MORPH_GRADIENT	4	形态学梯度
MORPH_TOPHAT	5	顶帽运算
MORPH_BLACKHAT	6	黑帽运算
MORPH_HITMISS	7	击中击不中运算

4. Resumen

En realidad, se puede considerar que la corrosión y la expansión realizan una (múltiples) operaciones de convolución en la imagen. Y debe elegir qué operación morfológica usar según la situación real, pero en términos generales, la operación de apertura (primero corrosión y luego expansión) se usa más comúnmente, porque puede eliminar el ruido y algunas áreas pequeñas irrelevantes, y retener el principal. área. (Pero se siente como filtrar)

Supongo que te gusta

Origin blog.csdn.net/qq_43199575/article/details/133852776
Recomendado
Clasificación