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