[GRASS-dev] PCA (i.pca) in G7: filtering and rescaling

Moritz Lennert mlennert at club.worldonline.be
Mon Dec 9 05:29:21 PST 2013


On 07/12/13 17:46, Nikos Alexandris wrote:
> Moritz Lennert wrote:
> ..
>> Try the attached diff to imagery/i.pca/main.c.
>
> Great! So, applied the diff. Here some numbers:
>
> PC1 238310.68 ( 0.1606, 0.2231, 0.1228, 0.9536) [96.10%]
> PC2   9364.65 ( 0.4319, 0.5989, 0.6082,-0.2912) [ 3.78%]
> PC3    217.78 ( 0.7028, 0.1609,-0.6897,-0.0672) [ 0.09%]
> PC4     80.33 ( 0.5420,-0.7521, 0.3732, 0.0366) [ 0.03%]
>
> Thus, we have:
>
> 96.10 + 3.78 + 0.09 = 99.88 + 0.09 = 99.97

That's 96.10 + 3.78 = 99.88 + 0.09 = 99.97 ;-)

>
>
> Then, pca with "-f":
>
> i.pca in=Blue_DNs,Green_DNs,Red_DNs,NIR1_DNs out=TEST_PC --o -f percent=96.10
> ERROR: Not enough principal components left for filtering
>
> and
>
> i.pca in=Blue_DNs,Green_DNs,Red_DNs,NIR1_DNs out=TEST_PC --o -f percent=96.11
>
> gives:
>
> r.info -r TEST_PC.1
> min=19.4012346427396
> max=1570.71398669652
>
>
> Good sign, means it works :-).  And it does not truncate (otherwise,
> trunc(96.11) = 96, so "normally" it should fail to filter again)!  Then, with
> "percent=99.87" still the same:
>
> r.info -r TEST_PC.1
> min=19.4012346427396
> max=1570.71398669652
>
> while with "percent=99.88" it works:
>
> r.info -r TEST_PC.1
> min=8.08831247843905
> max=1443.35532373978
>
>
> Finally, with "percent=99.97"  OR  below  OR  above, always gives the same
>
> r.info -r TEST_PC.1
> min=8.08831247843905
> max=1443.35532373978
>
>
> So, the questions are:
>
> 1) why does it make the switch with 99.11 and not with 99.10, while it does
> make the switch already with 99.88 instead of requiring 99.89?

Probably rounding. For printing the numbers are rounded to two decimals.


>
> 2) Why is there no filtering taking place for "percent >= 99.97" ?

Because you need all PCs to get above 99.97% and so the result is no 
filtering...

Moritz


More information about the grass-dev mailing list