在matlab中找到类似的角点

时间:2015-11-15 14:56:54

标签: matlab matlab-cvst

我需要在图像中找到类似的角(例如:矩形的4个角,相同的角,只是不同的方向?)。

enter image description here

我有这段代码:

    % read the image into MATLAB and convert it to grayscale
    I = imread('s2.jpg');
    Igray = rgb2gray(I);
    figure, imshow(I);
    % We can see that the image is noisy. We will clean it up with a few
    % morphological operations
    Ibw = im2bw(Igray,graythresh(Igray)); 
    se = strel('line',3,90);
    cleanI = imdilate(~Ibw,se);
    figure, imshow(cleanI);
    % Perform a Hough Transform on the image 
    % The Hough Transform identifies lines in an image 
   [H,theta,rho] = hough(cleanI);
   peaks  = houghpeaks(H,10); 
   lines = houghlines(Ibw,theta,rho,peaks);
   figure, imshow(cleanI)
   % Highlight (by changing color) the lines found by MATLAB
   hold on

运行此代码后,我将起始图像转换为二进制图像:

binary = im2bw(I);

在此之后,我从这两个二进制图像中得到了一个产品,我想我得到了一个角落......

product = binary .* cleanI;

现在我imfuse这张带有灰度图片的图片得到了这个:

enter image description here

我不知道该怎么办只能获得这四个角落!

1 个答案:

答案 0 :(得分:0)

好的第二次尝试。下面的代码最终没有完成工作,但它可能会有所帮助。 Edge标识轮廓,使用regionprops可以获得每个标识元素的特征。只要您知道所需对象具有哪些特征,就可以对其进行过滤并绘制。我经历了shapesata.Area的区域,第六大区域是你正在寻找的区域。如果你将Area与其他一些charateristica结合起来,你可能会得到你想要的那个。正如我所说的不理想而且最终但也许是一个开始...

clear all
close all

source = imread('Mobile Phone.jpg');
im     = rgb2gray(source);
bw  = edge(im ,'canny',[],sqrt(2));
shapedata=regionprops (bwlabel(bw,8),'all');

%index = find([shapedata.Area]== max([shapedata.Area]));
index = 213;

data  = shapedata(index).PixelList;

figure
imshow(im)
hold on
plot(data(:,1),data(:,2),'ro');