6

Так у меня есть изображение, как это:Как использовать вейвлет Haar для обнаружения LINES на изображении?

 CG generated bathroom

Я хочу, чтобы получить что-то вроде этого (я не рисуются все строки, которые я хочу, но я надеюсь, что вы можете получить мою идею):

 Black & White CG generated bathroom with some red lines between tiles

Я хочу использовать SURF ((ускорен Устойчивые характеристики) представляет собой надежный дескриптор изображения, первый представленный Herbert Bay и др. в 2006 году) или что-то, что на основе сумм ответов вейвлетов 2D Хаара и делает эффективность использование интегральных изображений для нахождения всех прямых на изображении. Я хочу получить относительные точки пиксельных координат начала и конца точек.

На этой фотографии, чтобы найти все линии между плитами и двумя черными линиями сверху.

Есть ли такой пример кода (с возможностью поиска строк)?

Я люблю C и C++, но любой другой считываемый код вероятно, будет работать для меня =)

+0

Возможный дубликат http://stackoverflow.com/questions/2596722/is-there-any-super-fast-algorithm-for-finding-lines-on-picture – andand

ответ

3

Ниже приведен полный пример применения Hough Transform для определения линий. Я использую 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 

alt text

alt text

alt text

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

+0

Hough Transform довольно медленный ... И мне нужно работать с 2k живым видео ... – Rella

1

Пытались ли вы более простой подход, такие как преобразование поджилки для нахождения линий? Функция для выполнения этого и примера включена в OpenCV под названием cvHoughLines2.

+0

Он выглядит решеткой!) – Rella

0

Двумерные вейвлет-преобразования реализованы в R с использованием пакета waveslim. В частности, функция dwt2D() использует C "backend" для скорости. Затем вы можете применить пороговое значение для поиска строк.

Смежные вопросы