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