2015-11-08 18 views
1

我要裁剪此原始圖像作物基於其二進制圖像 - Matlab的

bag http://oi65.tinypic.com/i19md1.jpg

以全新的形象,將只包含最小的白色像素袋(實質上縮小尺寸圖像的袋邊框)

cropbag http://oi67.tinypic.com/2wns6qr.jpg

因此,我決定先將其轉換爲二進制圖像

binbag http://oi67.tinypic.com/16aoej8.jpg

,但我不知道怎麼找,以便與imcrop使用它們的包角座標[XMIN ymin的寬度高度(我,RECT)。

任何幫助將是偉大的。

腳本:

clc;  
close all; 

url='http://oi65.tinypic.com/i19md1.jpg' ; 
rgbImage = imread(url); 

grayImage = rgb2gray(rgbImage); 

binaryImage = grayImage < 250; 

imshow(binaryImage); 

回答

1

這是執行一個非常容易的事。由於binaryImage包含要用於裁剪圖像的蒙版,因此您可以通過分別找到蒙版中非零的最小列和行座標,然後找到要在其中進行裁剪的左上角(xmin,ymin)找到寬度和高度,找到非零的右下角,然後減去寬度的兩個x座標和高度的兩個y座標。您需要爲每個差異添加1以說明自我距離(即,如果您的寬度爲1像素寬,則應該獲得寬度1,而不是0)。您可以使用find來幫助您找到非零的行和列位置。然而,imcrop要求x座標反映水平行爲和y座標分別find返回的行和列的位置,其中反映垂直行爲。這就是爲什麼你必須將它們翻轉,當你調用find

[y,x] = find(binaryImage); %// Find row and column locations that are non-zero 

%// Find top left corner 
xmin = min(x(:)); 
ymin = min(y(:)); 

%// Find bottom right corner 
xmax = max(x(:)); 
ymax = max(y(:)); 

%// Find width and height 
width = xmax - xmin + 1; 
height = ymax - ymin + 1; 

現在,您可以繼續前進,裁剪圖像:

out = imcrop(rgbImage, [xmin ymin width height]); 
imshow(out); 

我得到這個你裁剪圖像:

enter image description here