Hough Transform Matlab - как отобразить?

Я получил код из книги Feature Extraction & Image Processing, Поскольку я абсолютный новичок в 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

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

%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), с которыми мне нужно запустить эти программы. Но я не могу запустить его. Я создаю новый скрипт, вставляю код, сохраняю его и в главном окне запускаю имя функции, отправляя путь к изображению в качестве параметра. Это ничего не делает, ни сообщения, ни так.

1 ответ

Решение

Ваши функции не возвращают никакого значения, это означает, что вы должны добавить аргумент возврата к этим функциям (в случае грубого 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 в фигуре...

РЕДАКТИРОВАТЬ: глядя на ваш код, я не знаю, что переменная r0 должно быть!? Это определит дать вам сообщение об ошибке, поскольку оно нигде не определено.

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

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

Другие вопросы по тегам