我需要在图像中找到类似的角(例如:矩形的4个角,相同的角,只是不同的方向?)。
我有这段代码:
% 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
这张带有灰度图片的图片得到了这个:
我不知道该怎么办只能获得这四个角落!
答案 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');