[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Help with matrix replication
From: |
Carnë Draug |
Subject: |
Re: Help with matrix replication |
Date: |
Fri, 11 Jan 2013 08:26:37 +0000 |
On 20 December 2012 21:04, Richardson, Anthony <address@hidden> wrote:
> Pixel replication appears to produce the same result as imresize only when
> imresize is used with the "nearest" interpolation option and only for integer
> scale factors greater than one. (imresize supports non-integer scale factors
> both larger (enlarge) and smaller (shrink) than one.)
>
> Anyway:
>
> b = a((1:size(a,1))(ones(1,n),:), (1:size(a,2))(ones(1,n),:));
>
> appears (for the test cases I've run) to return the same result as b =
> imresize(a, n, 'nearest') when n is an integer larger than one. In this
> particular case, the line above is much faster and uses much less memory than
> imresize.
>
> Similarly, I assume pixel elimination:
>
> m = round(1/n);
> b = a(1:m:end,1:m:end);
>
> would be faster than b = imresize(a, n) when (1/n) is an integer greater than
> one (image shrinking) regardless of the interpolation method (but I have not
> tested this).
>
> I don't know that such special cases (enlarging or shrinking by integer scale
> factors) merit making changes to imresize.
>
> Tony
Just to let you know, I pushed a commit that implements this.
https://sourceforge.net/p/octave/code/11557/tree/trunk/octave-forge/main/image/inst/imresize.m
There was no performance increase when shrinking but it still shows
when its shrinking in one direction and enlarging on the other.
octave> a = round (1000, 1000);
octave> t = cputime(); b = old_imresize (a, 2, "nearest"); cputime() - t
ans = 1.5641
octave> t = cputime(); b = new_imresize (a, 2, "nearest"); cputime() - t
ans = 0.056003
octave> t = cputime(); b = old_imresize (a, 4, "nearest"); cputime() - t
error: memory exhausted or requested size too large for range of
Octave's index type -- trying to return to prompt
octave> t = cputime(); b = new_imresize (a, 4, "nearest"); cputime() - t
ans = 0.16001
octave> t = cputime(); b = old_imresize (a, 1/4, "nearest"); cputime() - t
ans = 0.024002
octave> t = cputime(); b = new_imresize (a, 1/4, "nearest"); cputime() - t
ans = 0.020002
octave> t = cputime(); b = old_imresize (a, [2000 500], "nearest");
cputime() - t
ans = 0.40803
octave> t = cputime(); b = new_imresize (a, [2000 500], "nearest");
cputime() - t
ans = 0.028001
Carnë
- Re: Help with matrix replication,
Carnë Draug <=