如何使用Matlab检测部分矩形并对齐图像?

时间:2017-03-28 20:30:27

标签: matlab image-processing

我想知道如何能够检测到我手工制作的纸质正方形的右下角(这可能不是一个正方形,因为我自己画了它)在另一个物体的顶部。我想要做的是使用此方块作为参考,并根据方块的右下角对齐图像。我是一个Matlab业余爱好者。有人可以帮忙吗?

左上方是我需要检测的纸方,哪个是参考点。

Example image with square at top left

1 个答案:

答案 0 :(得分:0)

你有很多选择来检测广场;它实际上是一个矩形;你想要检测,但最简单的方法是使用形态学操作。在这里,我提供了一个评论脚本来帮助你;因为你是MATLAB业余爱好者。

ShowMaskAsOverlay不是MATLAB中的内置命令,它非常有用。如果您想下载它,请访问此https://www.w3schools.com/js/js_whereto.asp

从我的问题中我理解的另一种方式。您可以在制作正方形之前保存图像,并在制作正方形后保存另一个图像。然后你只需要得到两个图像之间的差异。

close all;clear all;clc;

% Read in Image
im = imread('stack.png');

[r, c, ch] = size(im);

% Convert Image to Gray if it's RGB
if ch == 3
    gray = rgb2gray(im);
end

% Threshold Value; > 0.87 = 1 and  < 0.87 = 0
thresh = 0.87;
bw = im2bw(gray, thresh);

% Removing unwanted white pixels
bw = bwareaopen(bw, 400);
bw = imerode(bw, strel('disk', 3));
bw = imfill(bw, 'holes');
bw = bwareaopen(bw, 600);
bw = imdilate(bw, strel('disk', 3)); %optional. Could be omitted

% Calculating the BoundingBox of the Square
s = regionprops(bw, 'BoundingBox');
box = struct2cell(s);
pos = cell2mat(box);

%% Displaying Images
figure(1)
imshow(im)
rectangle('position', pos, 'edgecolor', 'red', 'linewidth', 1.5)
str = ['Bounding Box Bottom Right Corner Coordinate Value = ', num2str(pos(4))];
h = text(pos(3), pos(4), num2str(pos(4)));
set(h, 'Color', 'k', 'FontSize', 12, 'FontWeight', 'bold')
title(str)

figure(2)
imshow(gray)
showMaskAsOverlay(0.5, bw, 'g')

link