Таким образом, у меня есть изображение как это:
Я хочу получить что-то вроде этого (я не провел все линии, которые я хочу, но я надеюсь, что можно получить мою идею):
Я хочу использовать ПЕРЕМЕЩЕНИЕ ((Ускоренные Устойчивые Функции) устойчивый дескриптор изображения, сначала представленный Herbert Bay и др. в 2006), или что-то, что основано на суммах 2D ответов вейвлета Haar и делает эффективное использование интегральных изображений для нахождения всех прямых линий на изображении. Я хочу добраться относительно пиксельных проводов изображения, запускаются и конечные точки строк.
Таким образом на этом изображении для нахождения всех строк между мозаиками и теми 2 черными линиями на вершине.
Есть ли какой-либо такой Пример кода (с возможностью поиска строк) для запуска с?
Я люблю C и C++, но любой другой читаемый код будет, вероятно, работать на меня =),
Ниже приводится полный пример применения Преобразования Хафа для обнаружения линий. Я использую MATLAB для работы ..
Уловка состоит в том, чтобы разделить изображение на области и обработать каждую по-разному; это потому, что у вас разные «текстуры» в вашей сцене (плитки в верхней части стены сильно отличаются от более темных внизу, и одновременная обработка изображения не будет оптимальной).
В качестве рабочего примера рассмотрим следующий:
%# load image, blur it, then find edges
I0 = rgb2gray( imread('http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg') );
I = imcrop(I0, [577 156 220 292]); %# select a region of interest
I = imfilter(I, fspecial('gaussian', [7 7], 1), 'symmetric');
BW = edge(I, 'canny');
%# Hough Transform and show accumulated matrix
[H T R] = hough(BW, 'RhoResolution',2, 'Theta',-90:0.5:89.5);
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ...
'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho')
axis on, axis normal, colormap(hot), colorbar, hold on
%# detect peaks
P = houghpeaks(H, 20, 'threshold',ceil(0.5*max(H(:))));
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2);
%# detect lines and overlay on top of image
lines = houghlines(BW, T, R, P, 'FillGap',50, 'MinLength',5);
figure, imshow(I), hold on
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2);
end
hold off
Вы можете попробовать ту же процедуру для других регионов, настраивая параметры, чтобы получить хорошие результаты ..
Пробовали ли вы более простой подход, такой как преобразование Хафа, для поиска линий? Функция для выполнения этого и пример включены в OpenCV под названием cvHoughLines2 .
Двумерные вейвлет-преобразования реализованы в R с помощью пакета waveslim. В частности, функция dwt2D() использует "бэкенд" языка C для скорости. Затем можно применить пороговое преобразование для поиска линий.