2014-11-01 83 views
0

我需要在Matlab(Version 2010b,7.11.0)中使用imfill。我现在认为程序中有一个错误。 最简单的例子,我发现here是以下几点:(填充图像背景(0)开始在该位置[4 3]matlab的imfill函数似乎被窃听?

BW = [ 0  0  0  0  0  0  0  0; 
     0  1  1  1  1  1  0  0; 
     0  1  0  0  0  1  0  0; 
     0  1  0  0  0  1  0  0; 
     0  1  0  0  0  1  0  0; 
     0  1  1  1  1  0  0  0; 
     0  0  0  0  0  0  0  0; 
     0  0  0  0  0  0  0  0]; 
imfill(BW,[4 3]) 

按照规范这应该工作恕我直言,但我总是得到以下信息。谁能告诉我我做错了什么?

??? Error using ==> iptcheckconn at 56 
Function IMFILL expected its second input argument, CONN, 
to be a valid connectivity specifier. 
A nonscalar connectivity specifier must be 3-by-3-by- ... 
-by-3. 

Error in ==> imfill>parse_inputs at 259 
    iptcheckconn(conn, mfilename, 'CONN', conn_position); 

Error in ==> imfill at 124 
[I,locations,conn,do_fillholes] = parse_inputs(varargin{:}); 

Error in ==> test at 9 
imfill(BW,[4 3]) 

回答

2

这并不能解释问题,但将BW转换为逻辑阵列确实有效。我不确定为什么它是这样的:

clear 
close all 
clc 

BW = [ 0  0  0  0  0  0  0  0 
     0  1  1  1  1  1  0  0 
     0  1  0  0  0  1  0  0 
     0  1  0  0  0  1  0  0 
     0  1  0  0  0  1  0  0 
     0  1  1  1  1  0  0  0 
     0  0  0  0  0  0  0  0 
     0  0  0  0  0  0  0  0]; 

BW2 = imfill(logical(BW),[4 3]) 

BW2 = 

    0  0  0  0  0  0  0  0 
    0  1  1  1  1  1  0  0 
    0  1  1  1  1  1  0  0 
    0  1  1  1  1  1  0  0 
    0  1  1  1  1  1  0  0 
    0  1  1  1  1  0  0  0 
    0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
+0

有趣我甚至没有尝试过!确实有效。 – Divakar 2014-11-01 16:09:08

+0

非常感谢,解决了它!即使强硬我仍然不知道这里错了什么=) – flawr 2014-11-01 18:35:15

+0

不客气!这仍然困扰着我哈哈,但至少你的问题现在解决了:) – 2014-11-01 18:40:16

1

正如你已经看到了由@ Benoit_11其他解决方案,即最有可能的是输入为logical类,这是在你抛出一个错误的不是。所以,你就在那里!

现在,我想在这里提出一点奖励建议。

让我们假设您有一组种子点与他们的rowcolumn ID,并且您想一次性填充具有这些种子点的图像。对于那种情况, 您需要使用这些ID作为列向量。因此,如果你有rowcolumn ID作为 -

row_id = [4 3]; 
col_id = [3 7]; 

您可以填写图像与本 -

BW = imfill(BW,[row_id(:) col_id(:)]) 

但是,下面的代码将在你扔错误 -

BW = imfill(BW,[row_id col_id]) 
+0

非常感谢您指出这一点! – flawr 2014-11-01 18:35:43