2013-12-16 3 views
2

У меня есть код из книги Feature Extraction & Image Processing. Как я новичок в Matlab, я не знаю, как запустить эти коды, чтобы увидеть результаты. Готовы ли они?Hough Transform Matlab - как отобразить?

Первый один: Хаф преобразования для линий

%Polar Hough Transform for Lines 
function HTPLine(inputimage) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
rmax=round(sqrt(rows^2+columns^2)); 
acc=zeros(rmax,180); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for m=1:180 
     r=round(x*cos((m*pi)/180)+y*sin(m*pi)/180); 
     if(r0) acc(r,m)=acc(r,m)+1; end 
     end 
    end 
    end 
end 

Второй один: Хаф преобразования для кругов

%Hough Transform for Circles 
function HTCircle(inputimage,r) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
acc=zeros(rows,columns); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for ang=0:360 
     t=(ang*pi)/180; 
     x0=round(x-r*cos(t)); 
     y0=round(y-r*sin(t)); 
     if(x00 & y00) 
      acc(y0,x0)=acc(y0,x0)+1; 
     end 
     end 
    end 
    end 
end 

Третий один: Хаф преобразования для Elipses

%Hough Transform for Ellipses 
function HTEllipse(inputimage,a,b) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
acc=zeros(rows,columns); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for ang=0:360 
     t=(ang*pi)/180; 
     x0=round(x-a*cos(t)); 
     y0=round(y-b*sin(t)); 
     if(x00 & y0< rows & y0>0) 
      acc(y0,x0)=acc(y0,x0)+1; 
     end 
     end 
    end 
    end 
end 

У меня есть изображения (png), что мне нужно запустить эти программы. Но я не могу запустить его. Я создаю новый скрипт, вставляю код, сохраняю его и в главном окне запускаю путь имени имени функции к изображению в качестве параметра. Он ничего не делает, никакого сообщения или так.

ответ

0

Ваши функции не возвращают никакого значения, это означает, что вы должны добавить возвращаемый аргумент к этим функциям (в случае hough trafo вы хотели бы вернуть массив аккумуляторов acc) и, как описано в ручной (http://www.mathworks.de/de/help/matlab/ref/function.html), изменить функции заголовков:

function acc = HTPLine(inputimage) 

, а затем также называют его, как это из командной строки (или из другого сценария):

IMG = imread('some_image.jpg'); 
% e.g. convert to grayscale: 
IMG = rgb2gray(IMG); 
acc = HTPLine(IMG); 

вы тогда еще нужно найти максимум (или несколько максимумов, в зависимости от п сколько строк вы хотите, чтобы соответствовать) в аккумуляторе и отображения подобранной линии (эллипс/круг) по своему усмотрению с помощью plot в фигуре ...

EDIT: Глядя на ваш код, я не Не знаете, какая переменная r0 должна быть !? Это определит. дать вам ошибку, поскольку она не определена нигде.

И почему у вас есть if(inputimage(y,x)==0) в вашем коде? Пиксел в текущей точке не должен быть black в ordner, чтобы вычислить преобразование hough для этого единственного пикселя (просто подумайте о сером изображении с белой линией в нем -> ваш код ничего не сделает, как изображение не будет содержать черные пиксели). Так вот что вам нужно переосмыслить.

Если вы хотите, вы можете также использовать встроенный в Хаф преобразования MATLAB: http://www.mathworks.de/de/help/images/ref/hough.html // http://www.mathworks.de/de/help/images/ref/houghpeaks.html

+0

я изменил r0 на это: если (г 0), как и в книге. После удаления заявления if вы упомянули, я получил acc. Но я хочу, чтобы он возвращал изображение только с линиями. Посмотрите здесь: http://books.google.pl/books?id=97QebyNxyaYC&printsec=frontcover#v=onepage&q&f=false Page 200 - результаты g, h, i - Мне нужны только строки, без необходимости предыдущего изображения. Btw, коды, которые я вам дал, указаны на 2 страницах ниже, и здесь есть инструкции «если», wierd :) – Fengson

+0

Я не могу видеть страницы книг здесь из Германии, но неважно. Да, как я уже сказал, вам нужно найти максимумы в массиве аккумуляторов, которые затем дают вам параметры линии, которые вы можете легко построить. Таким образом, либо вы выполняете максима-поиск самостоятельно, либо выполняете его с помощью функции houghpeaks, также смотрите на принятый ответ здесь: http://stackoverflow.com/questions/6680302/hough-transform-in-matlab – tim

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