[Scilab-users] ?= creating ROI from mouse click

Philipp Mühlmann p.muehlmann at gmail.com
Sat Mar 12 21:35:49 CET 2016


to end this topic:

many thanks to the authors of the Matlab / Octave compatiblity toolbox

Their function moc_inpolygon is doing the same thing, but way faster.



2016-03-12 13:20 GMT+01:00 Philipp Mühlmann <p.muehlmann at gmail.com>:

> @ Samuel,
>
> thanks for the link.
>
> This is a nice function and it is doing what I am searching for.
>
> My example is rather slow though and I don't think that it is handy if one
> deals with big 2D Arrays.
>
> For a 640 x 512 array it took me 55 seconds to get the mask.
>
> guess the two for loops are the reason.
>
> clc;tic()
> img = rand(512,614).*255;
> rows = size(img,'r');cols = size(img,'c');
> mask = zeros(img);xpol = [];ypol = [];ibutton = 3;nr_points = 0;
> f=figure();f.color_map=graycolormap(255);Matplot(img);
> while ibutton == 3;
>     [ibutton,xcoord,ycoord]=xclick();
>     if ibutton ==3
>         nr_points = nr_points + 1;
>         plot(xcoord,ycoord,'o');
>         xpol(nr_points) = xcoord;
>         ypol(nr_points) = rows-ycoord;
>     end;enddelete(gcf());
> for i = 1:rows;
>     for j = 1:cols
>         inside = point_in_polygon(xpol, ypol, j, i) ;
>         if inside == %t;
>             mask(i,j) = 1;
>         end;
>     endend
> f = figure();f.color_map=graycolormap(255);Matplot(img.*mask);plot(xpol,rows-ypol,'o');
> t = toc()disp(t);
>
>
>
>
>
>
>
>
> 2016-03-12 1:02 GMT+01:00 Samuel Gougeon <sgougeon at free.fr>:
>
>> Le 12/03/2016 00:42, Samuel Gougeon a écrit :
>>
>> .../...
>>
>> This ends the selection part.
>>
>> After that, identifying points of your grayplot area being in the curve
>> may be done with
>> point_in_polygon: https://fileexchange.scilab.org/toolboxes/121000
>> However, this script is not vectorized. So, if your full area has big
>> sizes, it may takes a while.
>>
>> I would not guaranty that point_in_polygon() can be vectorized, but we
>> may try to.
>> It does not look too bad, at first sight :)
>>
>> .
>> Actually, its vectorization is straightforward (to process a matrix of
>> points without explicit "for" loop,
>> instead of a unique point). But the script has other problems.
>> Special cases (horizontal segments, points on segments, etc) are not
>> really handled.
>> Nevertheless, you may give it a try as is. Or improve it for special
>> cases.
>>
>> Samuel
>>
>>
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users
>>
>>
>
>
> --
> There we have the salad.
>



-- 
There we have the salad.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20160312/205096b0/attachment.htm>


More information about the users mailing list