spatstat::affine.im
This should indeed be considered a bug, and actually it has been fixed,
in version 1.28-2. But, sad to say, that version has not yet been put up
on CRAN. We've been getting flack from TPTB for releasing new versions
of spatstat too frequently --- so we've cut back on the update rate.
If anyone wants the debugged version of affine.im(), let me know and I
will email you the appropriate *.R file.
Marcelino's workaround should suffice for the time being if you just
want to wait until 1.28-2 is released.
cheers,
Rolf Turner
On 11/08/12 06:43, marcelino.delacruz at upm.es wrote:
Hi Jose Manuel, I don't think it is exactly a bug. Just try indicating the dimensions of the resulting image:
vec <- rnorm(1200) mat <- matrix(vec, nrow=30, ncol=40) whitenoise <- im(mat) whitenoise2 <- affine(whitenoise, mat=diag(c(2,3)),dimyx=c(30,40)) whitenoise2
real-valued pixel image 30 x 40 pixel array (ny, nx) enclosing rectangle: [1, 81] x [1.5, 91.5] units Cheers, Marcelino Con fecha 10/8/2012, "JOSE MANUEL BLANCO MORENO" <jmblanco at ub.edu> escribi?:
Regarding my previous query, the problem is in fact in line 22-23 of function affine.im, when calling affinexy; when calling affine.im for a rectangular image but applying a non-diagonal matrix, there is no problem, because affinexy is not executed. This example does not work (as before): vec <- rnorm(1200) mat <- matrix(vec, nrow=30, ncol=40) whitenoise <- im(mat) whitenoise2 <- affine(whitenoise, mat=diag(c(2,3))) But this one does: vec <- rnorm(1200) mat <- matrix(vec, nrow=30, ncol=40) whitenoise <- im(mat) whitenoise2 <- affine(whitenoise, mat=matrix(c(1,8,8,1), ncol=2)) Looks like a bug? --------------------------------------- Jos? M. Blanco-Moreno Dept. de Biologia Vegetal (Bot?nica) Facultat de Biologia Universitat de Barcelona Av. Diagonal 643 08028 Barcelona SPAIN --------------------------------------- phone: (+34) 934 039 863 fax: (+34) 934 112 842 ---------------------------------------
________________________________ De: JOSE MANUEL BLANCO MORENO Enviat el: divendres, 10 / agost / 2012 15:13 Per a: r-sig-geo at r-project.org Tema: spatstat::affine.im Dear users & experts, Does anyone know if affine transformation of images (function affine.im in spatstat) should work for non-square images? I thought it should, but I have tried: vec <- rnorm(1200) mat <- matrix(vec, nrow=30, ncol=40) whitenoise <- im(mat) whitenoise2 <- affine(whitenoise, mat=diag(c(2,3))) But I get: Error in im(v, xcol = xcol, yrow = yrow, xrange = newbox$xrange, yrange = newbox$yrange, : Length of yrow does not match nrow(mat) In addition: Warning message: In rbind(X$x, X$y) : number of columns of result is not a multiple of vector length (arg 2) However if I modify the example allowing for a square image it works perfectly: vec <- rnorm(900) mat <- matrix(vec, nrow=30, ncol=30) whitenoise <- im(mat) whitenoise2 <- affine(whitenoise, mat=diag(c(2,3))) And the only difference that I can spot between these matrices/images is the shape of the image itself. Affine should work for non-square images, isn't it? Or I am wrong? Is there any way to circumvent this problem? These are version details: R version 2.15.1 (2012-06-22) Platform: i386-pc-mingw32/i386 (32-bit) locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C LC_TIME=English_United States1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] spatstat_1.28-1 deldir_0.0-19 mgcv_1.7-18 loaded via a namespace (and not attached): [1] grid_2.15.1 lattice_0.20-6 Matrix_1.0-6 nlme_3.1-104 tools_2.15.1