matlab中的图像差异检测

时间:2016-05-05 16:13:27

标签: image matlab image-processing matlab-figure correlation

我正试图找到这两张照片的断韧带。因为它得到的模式我可以使用conv2函数找到一般的破碎区域。但是,我真的很难想到如何让它告诉精确断裂的韧带。你能不能给我一些关于如何找到哪些韧带被破坏的想法?

因为我是这个网站的新用户,所以无法使用二维卷积结果发布更多照片。

原始图片

original pictures

破碎图片

Broken one

3 个答案:

答案 0 :(得分:1)

在每个完美的正方形内建立一个区域增长算法。 一旦你得到它,计算该部分的面积。

找到后,计算剩余区域。较大的值将是断裂的韧带:)

答案 1 :(得分:0)

这也可能是一种有趣的方式。我将第二张图片保存为'image.jpg'。

I = imread('image.jpg');
J = imbinarize(rgb2gray(I)); % Threshold to get a BW image.
BW = bwpropfilt(~J, 'Area', [35001, 1013283]);
imshow(BW)

显示

Broken Edges filtered

为了方便地选择区域阈值,我使用了https://www.mathworks.com/help/images/calculate-region-properties-using-image-region-analyzer.html

如果您没有最近的MATLAB版本,其中imbinarizebwpropfilt不存在,您可以使用等效的阈值函数,regionprops来提取该区域内的所有对象范围。

答案 2 :(得分:0)

img = imread('unbroke.jpg');
level = graythresh(rgb2gray(img));
BW = im2bw(rgb2gray(img),level);
BW2= imdilate(imerode(BW, ones(5)), ones(5)); 
BW3 = bwmorph(BW2,'remove');
figure, imshow(BW2), hold on[![enter image description here][1]][1]

[H,T,R] = hough(BW2);
P  = houghpeaks(H,15,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));
lines = houghlines(BW2,T,R,P,'FillGap',5,'MinLength',7);

max_len = 0;
for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

   % Plot beginnings and ends of lines
   plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
   plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

   % Determine the endpoints of the longest line segment
   len = norm(lines(k).point1 - lines(k).point2);
   if ( len > max_len)
      max_len = len;
      xy_long = xy;
   end
end

来自不间断图像的线条

enter image description here

破碎图像中的行

enter image description here

现在,您知道线段是做什么匹配的。或者在阈值内找到要连接的段对(相同的斜率+相同的x / y截距)。