Удалить шум из изображения - PullRequest
0 голосов
/ 04 мая 2019

Я ищу функцию / фильтр / алгоритм для удаления шума внутри контура объекта.

Например:

входное изображение:

enter image description here

Я хочу получить:

enter image description here

P.S. Объект может иметь другую форму.

Идея была:

img_file = 'third.png'
img = cv2.imread(img_file, cv2.IMREAD_COLOR)
img = cv2.blur(img, (5, 5))

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
thresh0 = cv2.adaptiveThreshold(s, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

img_2d = color.rgb2gray(img)
print(img_2d.shape)
print(thresh0.shape)
diff = cv2.absdiff(img_2d, thresh0)
mask = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
i_mask = mask > 10
canvas = np.zeros_like(thresh0, np.uint8)
canvas[i_mask] = thresh0[i_mask]

cv2.imshow('Result', canvas)
cv2.imwrite("result.jpg", canvas)
cv2.waitKey(0)

Но я получаю следующую ошибку:

cv2.error: OpenCV(3.4.2) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:683: 
    error: (-5:Bad argument) When the input arrays in 
    add/subtract/multiply/divide functions have different types, the 
    output array type must be explicitly specified in function 
    'cv::arithm_op'

thresh0 имеет следующий вид:

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...