我正在做一個圖像處理項目,基本上是使用圖像處理技術的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