[scilab-Users] Finding continuous parts in a mask (ie a binary matrix)

Antoine Monmayrant antoine.monmayrant at laas.fr
Tue Mar 8 13:52:24 CET 2011


Le 08/03/2011 13:11, Samuel GOUGEON a écrit :
>  Hello Antoine,
Hi Samuel,

To give you more details, I just need to be sure to detect correctly 
convex shapes.
Most of the time, the "grains" I am interested in will be disks or squares.
I won't try to detect non-convex grains.
So I tried to answer you questions below with this application in mind.
>
> ----- Message d'origine -----
> De : Antoine Monmayrant
> Date : 08/03/2011 10:58:
>> Hi everyone,
>>
>> I have question that is more about image filtering than scilab, but I 
>> haven't found any answer so far so I'm turning towards scilab users.
>> I am looking for a way to determine continuous parts in a matrix made 
>> of 1 or 0.
>> Basically, this matrix is used as a mask to filter an image and I 
>> need to determine the number of isolated "grains" (ie continuous 
>> parts where the matrix is equal to 1) in this mask.
>> As an example, here is a mask:
>>
>> -->mask
>>  mask  =
>>
>>     0.    0.    0.    0.    0.    0.    0.    0.    0.    0.
>>     0.    0.    0.    0.    0.    0.    1.    1.    1.    0.
>>     0.    0.    0.    0.    0.    0.    1.    1.    1.    0.
>>     0.    0.    0.    0.    0.    0.    1.    1.    1.    0.
>>     0.    1.    1.    0.    0.    0.    0.    0.    0.    0.
>>     0.    1.    1.    1.    0.    0.    0.    0.    0.    0.
>>     0.    0.    1.    1.    0.    0.    0.    0.    0.    0.
>>     0.    0.    0.    0.    0.    0.    0.    0.    0.    0.
>>     0.    0.    0.    0.    0.    0.    0.    0.    0.    0.
>>     0.    0.    0.    0.    0.    0.    0.    0.    0.    0.
>>
> There are first a number of decisions to be taken about
> waht you will consider being a acceptable domain:
>
> * Do you consider 2 domains just connected by a right wire as distincts ?
>     0.    0.    0.    0.    0.    0.    0.    0.
>     0.    1.    1.    0.    0.    0.    0.    0.
>     0.    1.    1.    1.    0.    0.    0.    0.
>     0.    0.    1.    1.    0.    0.    0.    0.
>     0.    0.    0.    1.    0.    0.    0.    0.
>     0.    0.    0.    1.    1.    0.    0.    0.
>     0.    0.    1.    1.    1.    1.    0.    0.
> Likely no. There are the same...
No, as you said.
>
> * Do you consider 2 domains just connected by a diagonal wire as 
> distincts?
>     0.    0.    0.    0.    0.    0.    0.    0.
>     0.    1.    1.    0.    0.    0.    0.    0.
>     0.    1.    1.    1.    0.    0.    0.    0.
>     0.    0.    1.    1.    0.    0.    0.    0.
>     0.    0.    0.    0.    1.    1.    0.    0.
>     0.    0.    0.    1.    1.    1.    0.    0.
>     0.    0.    0.    1.    1.    1.    0.    0.
> This is a classic neighbouring option
Yes.
>
> *  Do you consider only doubly connex domains, so with no hole(s), 
> unlike here?:
>     0.    0.    0.    0.    0.    0.    0.    0.
>     0.    1.    1.    1.    0.    0.    0.    0.
>     1.    1.    0.    1.    0.    0.    0.    0.
>     1.    1.    0.    1.    0.    0.    0.    0.
>     0.    1.    1.    2.    0.    0.    0.    0.
>     0.    0.    0.    0.    0.    0.    0.    0.
Tricky one. In that case, this is one grain. This is an edge case for my 
application so it should not occur too often.
I can either consider the "0" inside to be part of the grain or not, it 
does not matter that much.
>
> * Do you consider only un-nested domain? Counter-example:
>     0.    1.    1.    1.    0.    1.    0.    0.
>     0.    1.    1.    1.    1.    1.    1.    0.
>     1.    1.    0.    0.    0.    0.    1.    0.
>     1.    1.    0.    Z.    Z.    0.    1.    0.
>     1.    1.    0.    0.    0.    0.    1.    0.
>     0.    1.    1.    1.    1.    1.    1.    0.
>     0.    0.    1.    1.    1.    1.    0.    0.
Well, again, it should occur not too often. In this case, I can consider 
the whole thing to be one big grain.
>
> IMO, it is hard to implement and discuss any algo before answering to 
> all these cases.
Any suggestion given my answers?
Are there any ressource I should check to  get some examples on these 
issues of neighbouring?

Cheers,

Antoine
>
> Regards
> Samuel
>




More information about the users mailing list