如何通过HSV色彩空间饱和度值提取焊接图像黑色目标的外轮廓
焊接焊道分割残留白点处理方案
- 优先对提取到的饱和度分量图做中值滤波预处理,选择3x3或5x5卷积核即可,中值滤波对离散型白点噪声的消除效果远好于线性滤波,同时不会过度模糊焊道的边缘轮廓。
- 分割时替换全局阈值为自适应阈值,焊接场景普遍存在局部光照不均问题,全局阈值极易残留杂散亮斑,可选择自适应高斯阈值,也可搭配OTSU算法自动计算最优分割阈值,减少背景误判。
- 结合形态学操作+连通域面积过滤二次提纯:先做开运算(先腐蚀后膨胀)消除体积过小的白点噪声,再对得到的二值图做连通域分析,直接删除面积小于预设阈值的小连通域,剩余大面积连通域即为目标焊道区域。
- 若效果仍不符合预期,可结合HSV空间的Hue(色相)通道做联合掩码,焊接焊道与背景母材的色相差异明显,和饱和度通道做与运算后可进一步过滤背景误判的亮斑。
参考代码(与现有代码逻辑衔接)
import cv2 import numpy as np image = cv2.imread('capture.png') hsvImage = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) s_channel = hsvImage[:, :, 1] # 中值滤波去离散白点 blur = cv2.medianBlur(s_channel, 5) # 自适应阈值分割 thresh = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 也可选择OTSU全局阈值方案 # _, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 形态学开运算去小亮点噪声 kernel = np.ones((3,3), np.uint8) opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2) # 连通域面积过滤,面积阈值可根据实际图像尺寸调整 num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(opening, connectivity=8) output = np.zeros_like(opening) for i in range(1, num_labels): if stats[i, cv2.CC_STAT_AREA] > 100: output[labels == i] = 255 cv2.imshow('processed result', output) cv2.waitKey(0)
针对你提取的饱和度图特征,上述流程可过滤掉绝大多数散状白点,同时保留完整的焊道轮廓。
内容的提问来源于stack exchange,提问作者Kimwaga Makono
相关产品推荐
相关产品推荐

