Подтвердить что ты не робот

Обнаружение тонких линий в размытом изображении

enter image description hereenter image description here Я ищу некоторые идеи для обнаружения строк в прикрепленном изображении. Линии считаются вертикальными, но они очень низкого качества, и между каждой размытой линией всего 2-3 пикселя.

Я уже пробовал эти методы: Эрозия & Дилатация по вертикали → хороший результат для улучшения CLAHE → Хорошо для улучшения Hough → Сбой с момента преобразования изображений на черный и в то же время будет слишком много ломаных линий или мостов. Также я попробовал маску вертикальной линии. В основном методы, основанные на преобразовании белого и белого изображений, для этого не применимы.

Detecting very thin lines in blurry image

4b9b3361

Ответ 1

Я бы разрушил изображение вдоль линий, чтобы получить 1d-профиль. И сделайте обнаружение там (например, посмотрев на пики выше медианы.

Вот сжатое изображение collapsed image

Обнаружение объекта там очевидно

Ответ 2

Очень перспективные работы по обнаружению слабых краев в шумных изображениях: Базовая версия для прямых линий: http://www.wisdom.weizmann.ac.il/~meirav/EdgesGalunBasriBrandt.pdf Более продвинутая версия: http://www.wisdom.weizmann.ac.il/~meirav/Curves_Alpert_Galun_Nadler_Basri.pdf

Я не уверен, что авторы сделали свой код общедоступным. Возможно, стоит обратиться к авторам напрямую.

В этих работах предлагается хорошо изученный и принципиальный метод обнаружения слабых границ.

Ответ 3

Здесь альтернативный подход, который найдет вам линии, предполагая, что пик проявляется в пределах ~ 5 пикселей. Он будет терпимым к небольшим поворотам изображения.

img = imread('http://i.stack.imgur.com/w7qMT.jpg');
img = rgb2gray(img);

%# smoothen the image a little with an anisotroic Gaussian
fimg = imfilter(double(img),fspecial('gaussian',[3 1]));

%# find the lines as local maxima
msk = ones(5);
msk(:,2:4) = 0;
lines = fimg > imdilate(fimg,msk);

enter image description here