我正在做一个图像处理项目,基本上是使用图像处理技术的Vectorise手绘图像。 我在我的项目中使用RANSAC。我面临的挑战是算法不能按需要执行最佳拟合,但它使用任意两个随机点并绘制一条连线,如下图所示。使用RANSAC进行线条拟合
RANSAC结果
在我的算法Vectorise手绘的图像,我还做了灰度化,图像阈值(图像二值化), 并使用形态学算子在骨骼化。
我正在为我的项目使用MATLAB。
以下是迄今为止我做过
% Line fitting using RANSAC
[x, y] =size(skeleton_image);
point =[];
count =1;
% figure; imshow(~data); hold on
for n =1:x
for m =1:y
if skeleton_image(n,m)==1
point(count,1)=m;
point(count,2)=n;
count= count+1;
end
end
end
data = point';
number = size(data,2); % Total number of points
X = 1:number;
iter=100; num=2; thresh = 1000;count_inlines=103; best_count=0; best_line=[];
for i=1:iter
% Randomly select 2 points
ind = randi(number,num); % randperm(number,num);
rnd_points= data(:,ind);
% Fitting line
Gradient = (rnd_points(2,2)-rnd_points(2,1))/(rnd_points(1,2)-rnd_points(1,1));
Constant = rnd_points(2,1)-Gradient*rnd_points(1,1);
Line = Gradient*X+Constant; [j,k]=size(Line);
% How many pixels are in the line?
for i=1:number
Distance = sqrt((Line(:,i)-data(1,i)).^2)+(Line(:,i)-data(2,i)).^2);
if Distance<=thresh
inlines = data(:,i);
count_inlines=countinlines+1;
best_line=Line;
end
您的代码对确定问题确实很有帮助。目前这个问题有点宽泛。 –
我在OCR中投放了代码的图像(编辑等待审核)。你错过了一个'end' – Steve