[R-sig-Geo] chull function behavior

Carsten Neumann carstennh at aol.com
Mon Dec 17 18:21:15 CET 2012


Dear Lukas,

very great thanks for your suggestion. Your example code works well in 
defining the convex upper hull as in CLARK et al. 1987 - "Automatic 
continuum analysis of reflectance spectra. I will work further to 
implement this into future R functionality.

Best

Carsten

On 12/13/2012 04:51 PM, Lukas Lehnert wrote:
> Dear Carsten,
>
> the function chull finds the hull of a curve, which consists of the upper and
> the lower part of the hull. In your case, you might be only interested in the
> upper part. You can extract this with the following commands:
>      c.hull <- chull(y)
>      c.hull <- c.hull[(which(c.hull == 1):length(c.hull))]
>      c.hull <- sort(c.hull)
>
> The calculation of the hull can be performed by:
>      hull[i,] <- approx(x=x[c.hull],y=y[i,c.hull], xout = x,method = "linear",
> ties = "mean")$y
>
> Best regards
>
> Lukas Lehnert
>
> Am Donnerstag, 13. Dezember 2012, 16:38:43 schrieb Carsten Neumann:
>> Dear List members,
>>
>> sorry for the non specific geo question, but working with image spectra
>> led me to the following problem calculating a convex upper hull curve
>> using the function "chull {grDevices}".
>>
>> Imaging there is a image spectra that you need to normalize using
>> continuum removal (deviding spectra by upper hull), then you do not
>> expect values greater than 1. Unfortunately the "chull()" functions did
>> not identify all points of intersection on a hull curve. At the
>> beginning there are also points beneath a hull, see example data (first
>> 3 points).
>>
>> ############################################################################
>> ################################# wavelength<-seq(350,449,1)
>> dummy<-c(0.204054, 0.204828, 0.204161, 0.202444, 0.199883, 0.200960,
>> 0.203838, 0.205723,
>>    0.203404, 0.204835, 0.207257, 0.205682, 0.209670, 0.212622, 0.212032,
>> 0.211062,
>>    0.212727, 0.215129, 0.216259, 0.217435, 0.218270, 0.219039, 0.220333,
>> 0.222520,
>>    0.223502, 0.223225, 0.225050, 0.225485, 0.226832, 0.230962, 0.231891,
>> 0.231264,
>>    0.231170, 0.233540, 0.235799, 0.238165, 0.240494, 0.240793, 0.242218,
>> 0.244078,
>>    0.244795, 0.246343, 0.247142, 0.247406, 0.249348, 0.250772, 0.251937,
>> 0.253166,
>>    0.253301, 0.253941, 0.255231, 0.256503, 0.257881, 0.258632, 0.258916,
>> 0.260414,
>>    0.261584, 0.262598, 0.263891, 0.264702, 0.265681, 0.266892, 0.267861,
>> 0.268923,
>>    0.270050, 0.271112, 0.271767, 0.273130, 0.274604, 0.275065, 0.276157,
>> 0.277331,
>>    0.278321, 0.279585, 0.280577, 0.281469, 0.282497, 0.283157, 0.284381,
>> 0.285984,
>>    0.286866, 0.288173, 0.289387, 0.290084, 0.290770, 0.291659, 0.292730,
>> 0.293823,
>>    0.294841, 0.295763, 0.296607, 0.297420, 0.298529, 0.299691, 0.300580,
>> 0.301300,
>>    0.302290, 0.303378, 0.303885, 0.304686)
>>
>> id<-sort(chull(wavelength, dummy))
>> plot(wavelength,dummy,type="l")
>> points(wavelength[id],dummy[id],type="p",col="red")
>> ############################################################################
>> ################################# Can anybody explain this behavior or give
>> some advice on improving functionality?
>>
>> Thanks in advance!
>>
>> Best
>>
>> Carsten
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo

-- 

Carsten Neumann
Telegrafenberg, A 17 01.13
14473 Potsdam
-------------------------------------------------------
Helmholtz Centre Potsdam
GFZ German Research Centre for Geosciences
Department 1 - Section 1.4 - Remote Sensing
-------------------------------------------------------
Tel.: +49 (0) 331 288 1766
e-mail: carstenn at gfz-potsdam.de



More information about the R-sig-Geo mailing list