我使用以下 MATLAB 代碼生成了 Voronoi 圖。問題是在輸出影像中我獲得了一些我想要洗掉的無用行。無用的線,我的意思是像那些用紫色圈起來的線,所以直接連接到多邊形的線。我只想要輸出影像中綠色的那些。有人可以幫助我嗎?提前致謝。
clc; clear all; close all;
%% Input Map
RGB = imread('mappa3.png');
figure('Position',[100 0 600 700],'color','k')
imagesc(RGB);
axis image
title('Input Map','color','w');
axis off
set(gcf, 'InvertHardCopy', 'off');
hold off;
%% Convert to binary image
I = rgb2gray(RGB);
binaryImage = im2bw(RGB, 0.3);
sz = size(binaryImage);
%% Pose
% Initial Pose
xs = 270; ys = 296; % valori iniziali 55 e 33
% Goal Pose
xg = 50; yg = 50; % valori iniziali 50 e 50
% Pose Matrix
pose = zeros(sz(1),sz(2));
pose(ys,xs) = 1;
pose(yg,xg) = 1;
%% Voronoi Road Map
figure('Position',[100 0 600 700],'color','k');
hold on;
set(gcf, 'InvertHardCopy', 'off');
sk = 1;
for i = 1:sz(1)
for j = 1:sz(2)
if(binaryImage(i,j) == 1 )
xv(sk) = j;
yv(sk) = i;
sk = sk 1;
end
end
end
[vrx,vry] = voronoi(xv,yv);
set(gca,'YDir','Reverse');
plot(xv,yv,'y.',vrx,vry,'b-')
axis tight
%axis([1 sz(2) 1 sz(1) ]) ;
axis image
title({'Voronoi Road Map';'* - Represents Starting and Goal Position '},'color','w');
axis off
spy(pose,'*r')


uj5u.com熱心網友回復:
您將每個單獨的像素作為一個細胞質心,因此 Voronoi 圖圍繞著每個單獨的像素。您希望將每組連接的像素(多邊形)作為質心。最重要的是,以某種方式包括這些像素組的大小,這樣 Voronoi 圖就不會穿過它們。
您可以通過計算背景的骨架來完成所有這些,如下所示:
img = imread('https://i.stack.imgur.com/TbmKp.png');
background = img(:,:,1)==0;
voronoi = bwskel(background,'MinBranchLength',1e6);

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473335.html
上一篇:例外命名約定和范圍
