找到图像的一系列曲线的交点:Matlab
Find the intersections of a series of curves of an image: Matlab
我有一张带有一系列线条的图像,如下所示:
我想知道是否有某种方法可以找到所有直线的交点。
我正在检查另一个 post,他们提供了一种找到交叉点的方法,但是一旦图像被分割,我想它有噪音或类似的东西......我将从一个简单的图像开始寻找每个路口。
我的主要想法是解决"system of equations"但是我觉得对于一个有很多交点的图像来说太难了,我不知道有没有什么方法可以找到所有的交点。
我假设你没有线方程。我使用骨架化和过滤来检测超过一条线穿过它们的小区域。我不确定对于嘈杂的图像是否会如此简单,但值得一试:
im = im2double(rgb2gray(imread('lines.png')));
% binarize black lines
bw = im == 0;
% skelatonize lines
sk = bwmorph(bw,'skel',inf);
% filter skeleton with 3X3 ones filter
A = imfilter(double(sk),ones(3));
% find blobs greater than 4 - more than one line crossing the filter
B = A > 4;
% get centroids of detected blobs
C = regionprops(B,'Centroid');
Cent = reshape([C.Centroid],2,[]).';
% plot
imshow(im)
hold on;
plot(Cent(:,1),Cent(:,2),'gx','LineWidth',2)
我有一张带有一系列线条的图像,如下所示:
我想知道是否有某种方法可以找到所有直线的交点。
我正在检查另一个 post,他们提供了一种找到交叉点的方法,但是一旦图像被分割,我想它有噪音或类似的东西......我将从一个简单的图像开始寻找每个路口。
我的主要想法是解决"system of equations"但是我觉得对于一个有很多交点的图像来说太难了,我不知道有没有什么方法可以找到所有的交点。
我假设你没有线方程。我使用骨架化和过滤来检测超过一条线穿过它们的小区域。我不确定对于嘈杂的图像是否会如此简单,但值得一试:
im = im2double(rgb2gray(imread('lines.png')));
% binarize black lines
bw = im == 0;
% skelatonize lines
sk = bwmorph(bw,'skel',inf);
% filter skeleton with 3X3 ones filter
A = imfilter(double(sk),ones(3));
% find blobs greater than 4 - more than one line crossing the filter
B = A > 4;
% get centroids of detected blobs
C = regionprops(B,'Centroid');
Cent = reshape([C.Centroid],2,[]).';
% plot
imshow(im)
hold on;
plot(Cent(:,1),Cent(:,2),'gx','LineWidth',2)