2016-09-18 77 views
0

我有形象的面具,我已經爲波紋管這一形象上定義的邊界:如何填寫邊界跟蹤?

im1

現在我想刪除像素指出,邊界,並得到這樣的面具:

im2

邊界是70 * 2的矩陣。 ,圖像大小爲4000 * 3000。

我不能在matlab中使用imfill,因爲我的邊界是離散的!
你知道我可以在MATLAB中做到嗎?

+0

[洪水填充(https://en.wikipedia.org/wiki/Flood_fill) – Jeon

回答

3

您可以使用inpolygon來獲得輪廓的蒙板表示。

% Get the X/Y Coordinates of all points in the image 
[xx, yy] = meshgrid(size(img, 2), size(img, 1)); 

% Create a mask with 1's inside the boundary 
mask = inpolygon(xx, yy, boundary(:,1), boundary(:,2)) 

如果您有圖像處理工具箱,你可以使用poly2mask

mask = poly2mask(boundary(:,1), boundary(:,2), size(img, 1), size(img, 2)); 

然後,您可以使用此面膜零出一切在它之外。

img = img .* mask; 
+0

它應該是:'[XX,YY] = meshgrid(1:尺寸(IMG,1),1: size(img,2)); '但是,使用我的代碼和這個變化我無法得到結果。它不停止運行或換句話說它掛起! – user6726469

+0

@ user6726469不,「meshgrid」輸入總是反轉。對於非常大的圖像,它絕對需要一段時間。你的圖像大小是多少? – Suever

+0

它是3328x4096。當我將其改變爲我所說的時候,需要很長時間。當我運行urs時,它給出了掩碼! – user6726469