Я пытаюсь избавиться от фонового шума от некоторых моих изображений. Это нефильтрованное изображение.
Чтобы фильтровать, я использовал этот код для создания маски того, что должно оставаться на изображении:
element = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
mask = cv2.erode(mask, element, iterations = 1)
mask = cv2.dilate(mask, element, iterations = 1)
mask = cv2.erode(mask, element)
С помощью этого кода, и когда я маскирую нежелательные пиксели из исходного изображения, я получаю:
Как вы можете видеть, все крошечные точки в средней области исчезли, но многие из тех, кто прибывает из более плотной области, также исчезли. Чтобы уменьшить фильтрацию, я попытался изменить второй параметр getStructuringElement()
на (1,1), но это дает мне первое изображение, как будто ничего не было отфильтровано.
Есть ли способ, в котором я могу применить фильтр, который находится между этими двумя крайностями?
Кроме того, может ли кто-нибудь объяснить мне, что именно делает getStructuringElement()
? Что такое "структурирующий элемент"? Что он делает и как его размер (второй параметр) влияет на уровень фильтрации?