【FPGA图像处理实战】- 开运算、闭运算与梯度运算

作者:FPGA入门到精通

今天介绍一下图像形态学处理中的开运算、闭运算和梯度运算,这三个运算都是以图像腐蚀和图像膨胀为基础的。

一、开运算、闭运算、梯度运算

1、开运算

开运算 = 先腐蚀运算,再膨胀运算,用公式表示如下:

A○B = (A ⊖ B) ⊕ B

从视觉上看仿佛将原本有细微连接的物体“分开”了一样。

开运算的作用:有效地去除图像中的噪声和细节,同时保留物体的主要轮廓。

2、闭运算

闭运算 = 先膨胀运算,再腐蚀运算,用公式表示如下:

A●B = (A ⊕ B) ⊖  B

从视觉上看仿佛将原本分开的部分连接起来。

闭运算的作用:能有效填平小孔,弥合缝隙。

3、梯度运算

图像梯度运算是图像膨胀处理减去图像腐蚀处理后的结果,从而得到图像的轮廓,可以表示为:

G = (A ⊕ B) ⊖ (A ⊖ B)

梯度运算的结果可以用于边缘检测、图像分割、特征提取等任务。

三、Python实现

1、函数介绍

dst = morphologyEx(src,op,kernel,dst = None,anchor = None,iterations = None,borderType = None,borderValue = None)

这个函数支持高级形态转换。

参数说明:

(1)src:输入图像

(2)op:形态操作的类型

cv2.MORPH_ERODE腐蚀

cv2.MORPH_DILATE膨胀

cv2.MORPH_OPEN开运算

cv2.MORPH_CLOSE闭运算

MORPH_GRADIENT梯度运算

MORPH_TOPHAT顶帽运算

MORPH_BLACKHAT 底帽运算

(3)kernel:操作核,是一个数组,结构化元素

(4)anchor:操作核的锚点位置,负值(Point(-1,-1))说明该锚点位于核中心。默认为核中心。

(5)iterations:迭代次数。默认为None。

(6)borderType:像素边界扩展类型

(7)borderValue:边界为常量时的边界值。默认值为None

2、源代码

import cv2
import numpy as np

img = cv2.imread('1280_720.bmp')

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)


# 图像开运算
open_img = cv2.morphologyEx(
    img, cv2.MORPH_OPEN, kernel=np.ones((5, 5), np.uint8))


# 图像开运算
close_img = cv2.morphologyEx(
    img, cv2.MORPH_CLOSE, kernel=np.ones((5, 5), np.uint8))


# 图像梯度开运算
grad_img = cv2.morphologyEx(
    img, cv2.MORPH_GRADIENT, kernel=np.ones((5, 5), np.uint8))

cv2.namedWindow("orignal", 0)
cv2.resizeWindow("orignal", 300, 180)  # 设置窗口大小
cv2.namedWindow("open", 0)
cv2.resizeWindow("open", 300, 180)  # 设置窗口大小
cv2.namedWindow("close", 0)
cv2.resizeWindow("close", 300, 180)  # 设置窗口大小
cv2.namedWindow("gradient", 0)
cv2.resizeWindow("gradient", 300, 180)  # 设置窗口大小
cv2.imshow('orignal', img)
cv2.imshow('open', open_img)
cv2.imshow('close', close_img)
cv2.imshow('gradient', grad_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

3、运行结果图

运行结果图.png

注意,这里前景色是白色。

四、FPGA实现

开运算、闭运算与梯度预算,都是基于图像和腐蚀操作来实现的,只需更改图像处理流程算法模块的顺序即可。

1、开运算

开运算,先腐蚀,再膨胀。实现的系统框图如下:

开运算.png

2、闭运算

闭运算,先膨胀,再腐蚀。实现的系统框图如下:

闭运算.png

3、梯度运算

梯度运算,膨胀减去腐蚀。实现的系统框图如下:

梯度运算.png

4、FPGA实现效果

FPGA实现效果.png

注意,这里前景色是黑色。

文章来源:FPGA入门到精通

最新文章

最新文章