0
我想知道如何檢測手工製作的紙張正方形的右下角(這可能不是完全正方形的,因爲我自己繪製了它)在另一個物體的頂部。我想要做的就是使用這個方塊作爲參考,並根據方塊的右下角對齊圖像。我是一個Matlab業餘愛好者。任何人都可以幫忙嗎?如何檢測部分矩形並使用Matlab對齊圖像?
左上角的正方形是紙張正方形,我需要檢測哪個是參考點。
我想知道如何檢測手工製作的紙張正方形的右下角(這可能不是完全正方形的,因爲我自己繪製了它)在另一個物體的頂部。我想要做的就是使用這個方塊作爲參考,並根據方塊的右下角對齊圖像。我是一個Matlab業餘愛好者。任何人都可以幫忙嗎?如何檢測部分矩形並使用Matlab對齊圖像?
左上角的正方形是紙張正方形,我需要檢測哪個是參考點。
你有很多的選擇,檢測方;它實際上是一個矩形;你想檢測,但最簡單的方法是使用形態學操作。在這裏我提供了一個評論腳本來幫助你;因爲你是一個MATLAB業餘愛好者。
ShowMaskAsOverlay
不是MATLAB中的內置命令,但它非常有用。如果你想下載它訪問這個link。
另一種方式,我會建議從我的理解你的問題。您可以在製作正方形之前保存圖像,並在製作正方形後保存另一張圖像。那麼你只需要弄清兩張圖片的區別。
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')
喜烏薩馬,感謝您的幫助!如果你不介意的話,我還有一些問題。 – NGCake
我試圖查看文檔,但在這種情況下,我不清楚「圖像侵蝕」究竟是什麼。它只是試圖讓所有東西都變成磁盤形狀嗎? regionprops如何知道要測量哪些區域? 不應該將右下角的座標設置爲兩個值,例如pos(3)和pos(4),或者您爲什麼只取pos(4)是否有原因?是否有可能根據這些座標裁剪圖像,例如右邊是100x100平方100像素,右邊是白色矩形右邊100px?或者我需要先轉換座標? – NGCake
@NGCake侵蝕是一種形態學操作,它可以去除分散的白色像素「1」。侵蝕是如何造成的?首先你指定一個結構元素'strel'。如果使用矩形或方形,我使用「磁盤」來避免尖銳的邊緣。然後,'strel';又名核心或面具;以曲折的方式掃描圖像。如果一個白色像素被N個黑色像素包圍。然後,白色像素被刪除。 – Tes3awy