How can I read an Elliptical Fourier Descriptor from SHAPE under the Momocs package of Rstudio?

170 Views Asked by At

I wish to load a CHC or NEF file from the SHAPE software in order to read the contours under MOMOCS and make the related analyses (Plot, PCA...)

I have difficulties under R as well as under the package.

How should I proceed?

Here is an extract of an outline. The first one is from a CHC and the other one from NEF.

Thank you in advance, any help is welcome.

CHC

IMG_20200710_0001_1 1045 531 1,428639E-02 46736 5 5 4 4 4 5 4 4 4 5 5 4 5 5 5 5 5 5 4 5 6 5 4 5 5 5 6 5 5 6 5 5 5 5 6 5 6 5 5 6 5 5 6 5 6 5 5 6 6 5 6 5 6 5 6 5 6 5 6 6 5 6 5 6 6 5 6 6 5 6 6 5 6 6 5 6 6 5 6 6 5 6 6 5 6 6 5 6 5 6 5 6 6 5 6 6 6 5 5 6 6 5 6 6 5 6 6 5 6 6 5 5 6 6 6 6 5 6 5 6 6 6 5 6 5 6 6 6 6 5 6 6 6 5 6 5 6 6 6 6 6 5 6 6 6 5 6 6 5 6 6 6 5 6 6 5 6 6 5 6 6 5 6 6 6 5 6 6 6 6 5 6 6 5 6 6 5 6 6 6 6 5 6 6 5 6 6 6 5 6 6 6 6 6 6 6 5 6 6 6 5 6 5 6 6 6 6 6 6 6 5 6 6 5 6 6 6 5 6 6 6 5 6 6 5 6 6 6 6 5 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 5 6 6 6 5 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 7 6 6 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 5 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 7 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 7 6 6 6 6 7 6 6 6 6 6 6 7 6 6 6 6 6 6 7 6 6 6 7 6 7 6 6 6 6 6 7 6 6 6 6 6 6 7 6 6 7 6 6 7 6 6 6 6 6 7 6 7 6 6 6 6 7 6 6 6 6 6 6 7 6 6 6 6 7 6 6 6 6 6 7 6 6 7 6 6 6 6 7 6 6 6 6 6 6 7 6 6 6 6 7 6 6 7 6 6 6 6 6 6 7 6 6 6 6 7 6 6 6 6 7 6 6 6 6 6 7 6 6 6 7 6 6 6 7 6 6 6 7 6 6 6 7 5 6 6 7 6 6 6 7 6 7 6 6 6 6 7 6 6 6 6 7 6 6 6 6 6 7 6 6 7 6 6 6 6 7 6 6 6 6 6 6 6 7 6 6 7 6 6 6 6 7 6 6 6 7 6 6 7 6 6 6 6 6 7 6 6 6 7 6 6 6 6 6 7 6 7 6 6 6 6 6 7 6 6 6 6 7 6 6 7 6 6 7 6 6 6 6 7 6 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 1 0 2 1 1 0 0 0 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 4 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 3 1 2 2 4 3 1 0 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 1 2 2 2 3 1 2 2 3 2 2 2 2 2 2 2 3 1 2 2 2 2 3 1 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 1 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 2 2 1 2 2 1 2 2 2 1 2 2 1 2 2 2 1 2 2 2 1 2 2 2 2 1 0 2 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 3 1 0 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 3 1 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 1 2 2 3 2 2 2 2 3 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3 2 2 2 3 2 2 3 2 2 3 2 2 3 2 3 2 3 2 2 3 3 2 4 3 2 3 3 4 4 -1

NEF

#CONST 1 1 1 0
#HARMO 15
IMG_20200710_0001_1
  1.0000000e+00  3.5723303e-18 -2.2782437e-17  1.4062862e-01
 -3.5345700e-03 -2.9677476e-04 -7.7529255e-02  2.8661995e-02
  1.0149772e-01  3.3103762e-03  1.0055048e-03  3.3982778e-02
 -5.6327330e-04 -3.2074328e-03 -5.6057424e-03  4.8512662e-03
  3.8131276e-02 -1.5129959e-05  2.2552160e-03  1.4017338e-02
  1.1789915e-04 -2.9600305e-03 -8.4295737e-04 -3.4299796e-04
  1.7271413e-02 -7.2651006e-04 -1.2037379e-04  7.6870442e-03
 -2.0549746e-04 -1.3433972e-03 -1.8426509e-03 -5.7843862e-04
  1.0074513e-02 -9.3238318e-04  4.8671011e-05  5.6731905e-03
 -7.5994187e-04 -1.0418345e-03 -7.7574542e-04 -2.8944747e-04
  6.4933570e-03 -4.0572074e-04 -7.6458810e-04  4.0939891e-03
 -5.4921053e-04 -8.4817676e-04  1.6206266e-04 -4.6108536e-04
  4.5195469e-03 -5.4106090e-04  1.6321172e-04  3.1721989e-03
 -1.8313986e-04 -3.5979483e-04  4.8276592e-04 -9.0690768e-04
  3.0959844e-03 -6.1876139e-04 -6.3948596e-04  2.2105213e-03
2

There are 2 best solutions below

0
On

sorry for the delay.

  • If you want to use CHC, then chc2pix is your friend indeed. You end up with an traditionnal outline as defined by its (x, y) coordinates.
  • For the NEF, it's "just" a simple string manipulation task. The clue pointed by @ordynets would likely work (or at least be very useful). Another option would be to go around :
# read the nef
m <- read.table("~/Desktop/nef.txt", skip=3)
# transpose to get in the "right" order
coe <- m %>% t %>% c %>% matrix(nrow=1)
# name columns to make thngs clear
colnames(coe) <- paste0(rep(LETTERS[1:4], times=nrow(m)),
                        rep(1:nrow(m), each=4))


# from now you can do whatever you want in Momocs
# eg rbind many to have an OutCoe, calculate the inverse EFT:
coe %>% coeff_rearrange("name") %>% coeff_split(nb.h=10) %>% efourier_i() %>% coo_plot()

  • (by the way, I'm still working on MomX, and such wrapper would fit in Momit but I struggle to find time to finish it).
  • do not hesitate to contact me directly !
0
On

In Momocs version 1.3.2 installed from GitHub https://github.com/MomX/Momocs/ I see the function chc2pix() that should import SHAPE's chain codes to R. In earlier Momocs documentation (https://www.rdocumentation.org/packages/Momocs/versions/0.2-03/topics/nef2Coe), you can find (in Examples!) the function nef2Coe(). I do not see this function in the current Momocs 1.3.2 but you can copy the whole function to your R script or save it to .txt and call it from R as source('path/to/your/NEF2COE.txt'). When the Momocs will be fully resurrected as MomX (https://momx.github.io/MomX/), perhaps the function again will be a part of the package.