Импорт трехмерной аффинной трансформации сборки в Java в R - PullRequest
0 голосов
/ 14 октября 2018

У меня есть вопрос, связанный с аффинными преобразованиями (между тегами <affine>).Я извлекаю следующие два аффинных преобразования из XML-файла ( полный XML-файл здесь ), созданного с помощью плагина BigDataViewer Fiji, созданного с Java, с использованием функции AffineTransform3D :

<ViewRegistrations>
<ViewRegistration timepoint="0" setup="0">
  <ViewTransform type="affine">
    <Name>Fast 3d geometric hashing (rotation invariant), AffineModel3D on [beads (c=0)]</Name>
    <affine>1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0</affine>
  </ViewTransform>
  <ViewTransform type="affine">
    <Name>calibration</Name>
    <affine>1.9998662296836334 0.0 0.0 0.0 0.0 1.9998662296836334 0.0 0.0 0.0 0.0 1.9998662296836334 0.0</affine>
  </ViewTransform>
</ViewRegistration>

Я хотел бы импортировать два аффинных преобразования в R, используя функцию buildAffine() из пакета R {RNiftyReg}, а затем вычислить их композицию, используя composeTransforms() из {RNiftyReg}.

buildAffine(translation = c(0, 0, 0), scales = c(1, 1, 1), skews = c(0, 0,0),
  angles = c(0, 0, 0), source = NULL, target = NULL,
  anchor = c("none", "origin", "centre", "center"))

Мой вопрос:
Приведенные выше аффинные преобразования хранятся в векторе из 12 индексов.buildAffine() требует в качестве входных параметров значения для сдвигов, масштабов, перекосов и углов.
Я хотел бы знать, какому значению соответствует какое значение.

1 Ответ

0 голосов
/ 15 октября 2018

Я в основном пользователь R, но здесь говорится: имена переменных в вызове Java:

 dat <- scan (text="double xx, double yx, double zx, double tx, double xy, double yy, double zy, double ty, double xz, double yz, double zz, double tz", what="")
dat <- dat[dat != "double"]
matrix(dat,4)
      [,1]  [,2]  [,3] 
[1,] "xx," "xy," "xz,"
[2,] "yx," "yy," "yz,"
[3,] "zx," "zy," "zz,"
[4,] "tx," "ty," "tz" 

На этой странице показано, как можно закодировать аффинное преобразование, с той лишь разницей, чтоматрица 4x3 транспонируется: https://o7planning.org/en/11157/javafx-transformations-tutorial

 t( matrix(dat,4) )
     [,1]  [,2]  [,3]  [,4] 
[1,] "xx," "yx," "zx," "tx,"
[2,] "xy," "yy," "zy," "ty,"
[3,] "xz," "yz," "zz," "tz" 

Таким образом, матрица будет применена к вектору c (x, y, z, 1), чтобы получить результат:

enter image description here

...