Медианный фильтр будет таким образом отрезать углы вашего изображения.Учитывая, что ваше изображение является более или менее двоичным, простой способ удаления шума в этом случае состоит в том, чтобы удалить изолированные пиксели: пиксели, окруженные значениями намного меньшими, чем он сам.
Это может бытьлегко выполняется в MATLAB с помощью набора инструментов для обработки изображений с использованием морфологического отверстия (imopen
):
img = [1 1 1 1 1 1 1 1 1
1 100 100 100 100 100 1 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 100 100 1 100
1 100 100 1 1 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 1 1 1 1
1 100 100 1 80 1 1 1 90];
img = padarray(img,[1,1]); % proper boundary conditions needed
img = max(imopen(img,[1,1]),imopen(img,[1;1]));
img = img(2:end-1,2:end-1); % remove padding again
Мы используем два отверстия: одно с SE [1,1]
, а другое с SE [1;1]
.Любой из них может удалить строки толщиной в 1 пиксель, но ни одна из них не будет удалена обоими.Таким образом, мы берем максимум двух результатов: если оба фильтра удаляют пиксель, он останется удаленным, но если его удалит только один, мы хотим сохранить этот пиксель (он принадлежит линии).
Существуют и другие способы идентификации изолированных пикселей, но этот метод довольно прост в реализации на основе существующей функции в наборе инструментов.