Почему skimage white_tophat отличается от цилиндра, созданного вручную?

#python #opencv #image-processing #scikit-image #mathematical-morphology

#питон #opencv #обработка изображений #scikit-изображение #математико-морфология

Вопрос:

Я пытаюсь удалить градиентный фон с изображения, используя операцию морфологического цилиндра. для этой цели я использую функции библиотеки морфологии скимажа (opening, whiet_tophat). Сам по себе белый верх означает = исходное изображение — открытое изображение. В своем коде я сравниваю результаты функции skimage wht с результатами, полученными вручную.

 import numpy as np from skimage import morphology import cv2 as cv img = cv.imread('images/TEST.jpg', cv.IMREAD_GRAYSCALE) img_not = cv.bitwise_not(img) se = np.ones((50,50), np.uint8) opened = morphology.opening(img, se) wth_my= img_not - opened wth=morphology.white_tophat(img_not, se) cv.imwrite('images/TEST_Opened.jpg', opened) cv.imwrite('images/TEST_WTH_MY.jpg', wth_my) cv.imwrite('images/TEST_WTH.jpg', wth) cv.waitKey(0) cv.destroyAllWindows()  

Результаты совсем другие (см. скриншоты). Пожалуйста, посоветуйте, что не так в моем коде.

Исходное Изображение Открытие морфологии Руководство по эксплуатации С Библиотека С

Ответ №1:

Как вы сказали, фильтр в цилиндре есть I - opening(I) . Ты написал:

 opened = morphology.opening(img, se) wth_my= img_not - opened  

Обратите внимание , как используется одна строка img , а другая использует img_not . Вам img_not также нужно применить открытие, чтобы это было то же изображение, над которым работают две части операции.