Review: Canny
Stéfan van der Walt
stefan at sun.ac.za
Thu Mar 31 05:13:41 EDT 2011
Hi Dan
On Thu, Mar 31, 2011 at 1:02 AM, Dan Farmer <dfarmernv at gmail.com> wrote:
> https://github.com/dfarmer/scikits.image/compare/master...dfarmer-filters-canny
I read through your patch and made some preliminary comments.
> Mostly just trying to follow procedure. I already mentioned my
> concerns in the previous thread. I made one stab at introduced a
> "None" default for the mask, but I got hung up and reverted it. The
> default I was going to propose was np.ones(img.shape,bool) (and after
> the fact I even noticed that's how it is used in one of the unit
> tests). But I started thinking that that could be quite wasteful of
> memory if you were working with large images (on my test use case with
> ~512x512 images it's about 300 KB for the "fake" mask).
It seems as though this specific implementation of the algorithms
relies on creating the mask, so I don't think you can get away from
it. The typical way to do it would be:
def canny(..., mask=None, ...):
if mask is None:
mask = np.ones(x.shape, dtype=bool)
> The problem I had was that if I don't allocate the emask array I get
> run-time errors starting at line 129 (in the diff of canny.py) because
> the arrays all have different lengths if they aren't logical_and'd
> with emask above.
Yes, I think the only way to avoid allocating the mask explicitly is
to rewrite the algorithm in Cython, where you can modify behaviour
inside the for-loop.
Regards
Stéfan
More information about the scikit-image
mailing list