一般来讲广义霍夫变换是指把坐标空间的图像映射到参数空间,需要先确定转换到参数空间的函数关系式,这种转换是连续的,但是对于任意图形而言这种关系式往往很难确定,而且我们处理的图像本身就是离散的,不需要连续变换。对于有限长的曲线而言,只要确定对应每一个坐标对应的参数空间的映射表就能画出参数空间的离散曲线。之后根据累加值就可以识别任意曲线。代码实现如下:
clearvars;
close all;
target = imread('target.jpg');
pic = imread('test.jpg');
target = rgb2gray(target);
pic = rgb2gray(pic);
target = target<50;
pic = pic<50;
figure;imshow(target);
figure;imshow(pic);
[y,x] = find(target);
cx = round(mean(x));
cy = round(mean(y));
x_map = cx-x;
y_map = cy-y;
[W,L] = size(pic);
[ys,xs] = find(pic);
h_space = zeros(W,L);
for flag = [ys,xs]'
y