Как использовать Wavelet Haar для обнаружения линий на изображении?

StackOverflow https://stackoverflow.com/questions/2599326

Вопрос

Поэтому у меня есть как это изображение:

 CG generated bathroom

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Двумерные вейвлет-преобразования реализуются в R с использованием пакета волновать. Отказ В частности, функция DWT2D () использует C «Backend» для скорости. Затем вы можете применить пороговое значение, чтобы найти строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top