Подключение недостающих пикселей - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь заполнить недостающие пиксели (как показано на рисунке) в части круга, чтобы сделать полные и чистые круги.Я попробовал методы улучшения изображения, они не очень помогли.Пожалуйста, предложите мне, как это сделать в Matlab, или предоставьте код для этого.Заранее спасибо.

enter image description here

Ответы [ 2 ]

3 голосов
/ 04 июня 2019

Поскольку ваши теги предполагают, что вы также открыты для решений Python, я представляю следующий подход с использованием OpenCV, в частности метод cv2.HoughCircles, следуя этому руководству .

Вот код:

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

Как вы видите, вы не получите идеальных результатов, используя этот метод на этом конкретном изображении. Настройка параметров может улучшить результат.

Надеюсь, это поможет!

0 голосов
/ 04 июня 2019

Если ваша проблема связана с кругами, вы можете использовать алгоритм Hough Circles, чтобы найти круги на изображении, а затем просто нарисовать их.Я не знаю, как это делается в Matlab.В python вы можете использовать opencv HoughCircles

Если вы ищете более общее решение, морфологические операторы , такие как расширение, разрушение, открытие, закрытие, могут представлять интерес.

...