2017-03-28 60 views
0

我想知道如何檢測手工製作的紙張正方形的右下角(這可能不是完全正方形的,因爲我自己繪製了它)在另一個物體的頂部。我想要做的就是使用這個方塊作爲參考,並根據方塊的右下角對齊圖像。我是一個Matlab業餘愛好者。任何人都可以幫忙嗎?如何檢測部分矩形並使用Matlab對齊圖像?

左上角的正方形是紙張正方形,我需要檢測哪個是參考點。

Example image with square at top left

回答

0

你有很多的選擇,檢測方;它實際上是一個矩形;你想檢測,但最簡單的方法是使用形態學操作。在這裏我提供了一個評論腳本來幫助你;因爲你是一個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') 

enter image description here

+0

喜烏薩馬,感謝您的幫助!如果你不介意的話,我還有一些問題。 – NGCake

+0

我試圖查看文檔,但在這種情況下,我不清楚「圖像侵蝕」究竟是什麼。它只是試圖讓所有東西都變成磁盤形狀嗎? regionprops如何知道要測量哪些區域? 不應該將右下角的座標設置爲兩個值,例如pos(3)和pos(4),或者您爲什麼只取pos(4)是否有原因?是否有可能根據這些座標裁剪圖像,例如右邊是100x100平方100像素,右邊是白色矩形右邊100px?或者我需要先轉換座標? – NGCake

+0

@NGCake侵蝕是一種形態學操作,它可以去除分散的白色像素「1」。侵蝕是如何造成的?首先你指定一個結構元素'strel'。如果使用矩形或方形,我使用「磁盤」來避免尖銳的邊緣。然後,'strel';又名核心或面具;以曲折的方式掃描圖像。如果一個白色像素被N個黑色像素包圍。然後,白色像素被刪除。 – Tes3awy