连接丢失的像素

时间:2019-06-04 11:13:41

标签: python-3.x matlab image-processing image-segmentation edge-detection

我试图填充圆圈部分中缺失的像素(如图所示),以形成完整而干净的圆圈。我尝试了图像增强技术,但并没有太大帮助。请建议我如何在Matlab中进行操作,或提供一些代码来做到这一点。预先感谢。

enter image description here

2 个答案:

答案 0 :(得分:3)

由于您的标签表明您也欢迎使用Python解决方案,因此我在cv2.HoughCircles之后介绍了以下使用OpenCV的方法,特别是this tutorial方法。

代码如下:

import cv2
import numpy as np

# Read input image
img = cv2.imread('images/xbHB0.jpg', cv2.IMREAD_GRAYSCALE)

# Blur input image to prevent too much false-positive detected circles
img = cv2.GaussianBlur(img, (3, 3), 0)

# Initialize outputs
clean = np.zeros(img.shape, np.uint8)
compare = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

# Detect circles using Hough transform; convert center points and radii to int
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=25, minRadius=10, maxRadius=0)
circles = np.uint16(np.around(circles))

# Draw detected circle to outputs
for i in circles[0, :]:
    cv2.circle(clean, (i[0], i[1]), i[2], 255, 1)
    cv2.circle(compare, (i[0], i[1]), i[2], (0, 255, 0), 1)
    cv2.circle(compare, (i[0], i[1]), 2, (0, 0, 255), 1)

cv2.imshow('Input', img)
cv2.imshow('Comparison', compare)
cv2.imshow('Clean output', clean)
cv2.waitKey(0)
cv2.destroyAllWindows()

“干净的”圆圈看起来像这样:

Clean circles

并且,为了比较,在原始图像上覆盖:

Comparison

如您所见,在此特定图像上使用此方法将无法获得理想的效果。参数调整可能会改善结果。

希望有帮助!

答案 1 :(得分:0)

如果问题是特定于圆的,则可以使用“霍夫圆”算法在图像中找到圆,然后简单地绘制它们。我不知道如何在matlab中完成。在python中,您可以使用opencv HoughCircles

如果您正在寻找更通用的解决方案,可能会感兴趣的是morphological operators,例如膨胀,腐蚀,打开,关闭。