[Insight-users] Is there a limit for the number of Landmarks
-Pairs for Thin Plate Spline Transform ?
Siwei Yang
s.yang at dkfz-heidelberg.de
Wed Jul 20 12:24:59 EDT 2005
Hi Luis,
I did it as you said, and used gdb to debug this program under Linux.
the call stack was put out as following:
..................... 0 146.81281 0 146.50938 0
145.98630 0 145.52319 0 145.12064 0
144.77914 0 144.49913 0 144.28098 0
144.12494 0 144.03125 0 144.00000 0
144.03125 0 146.53668 0 145.91093 0
143.08739 0 143.22360 0 143.42245 0
143.68369 0 144.00694 0 147.52628 0
146.74127 0 146.01370 0 143.40154 0
143.85062 0 146.84004 0 143.19916 0
143.75327 0 146.16429 0 143.39107 0
146.41380 0 145.49915 0 143.09787 0
142.12671 0 142.87407 0 145.49915 0
142.72000 0 143.58969 0 144.89996 0 142.94055 0
Program received signal SIGINT, Interrupt.
[Switching to Thread 182985787712 (LWP 31553)]
0x0000002a9aa5afc2 in __write_nocancel () from /lib64/tls/libc.so.6
(gdb) backtrace /////////////////CALL STACK
#0 0x0000002a9aa5afc2 in __write_nocancel () from /lib64/tls/libc.so.6
#1 0x0000002a9aa134b3 in _IO_new_file_write () from /lib64/tls/libc.so.6
#2 0x0000002a9aa13200 in new_do_write () from /lib64/tls/libc.so.6
#3 0x0000002a9aa13436 in _IO_new_file_xsputn () from /lib64/tls/libc.so.6
#4 0x0000002a9aa09fec in fwrite () from /lib64/tls/libc.so.6
#5 0x0000002a9a7657b7 in std::__basic_file<char>::xsputn () from
/usr/lib64/libstdc++.so.5
#6 0x0000002a9a71d918 in std::basic_filebuf<char,
std::char_traits<char> >::_M_convert_to_external () from
/usr/lib64/libstdc++.so.5
#7 0x0000002a9a71dae0 in std::basic_filebuf<char,
std::char_traits<char> >::_M_really_overflow () from
/usr/lib64/libstdc++.so.5
#8 0x0000002a9a71dcf1 in std::basic_filebuf<char,
std::char_traits<char> >::overflow () from /usr/lib64/libstdc++.so.5
#9 0x0000002a9a758305 in std::basic_streambuf<char,
std::char_traits<char> >::xsputn () from /usr/lib64/libstdc++.so.5
#10 0x0000002a9a71d3b6 in std::basic_filebuf<char,
std::char_traits<char> >::xsputn () from /usr/lib64/libstdc++.so.5
#11 0x0000002a9a74eea6 in std::ostream::write () from
/usr/lib64/libstdc++.so.5
#12 0x0000002a9a74f0c5 in std::operator<< <std::char_traits<char> > ()
from /usr/lib64/libstdc++.so.5
#13 0x0000002a97c87c12 in vnl_matlab_print<float> () from
/usr/local/lib/InsightToolkit/libitkvnl.so
#14 0x0000002a97c87db9 in vnl_matlab_print<float> () from
/usr/local/lib/InsightToolkit/libitkvnl.so
#15 0x0000002a978f88e0 in vnl_svd<float>::vnl_svd () from
/usr/local/lib/InsightToolkit/libitkvnl_algo.so
#16 0x000000000049c008 in itk::KernelTransform<float,
2u>::ComputeWMatrix (this=0x7cefd0) at itkKernelTransform.txx:196
#17 0x00000000004966ef in SetupKernelTransform (_source=0x7cf190,
df=0x7d02a0, downsamplingfactor=3) at
/home/yang/workspace2/TPS/main_18_Juli.cpp:1053
#18 0x0000000000498c46 in main (argc=18, argv=0x7fbfffe198) at
/home/yang/workspace2/TPS/main_18_Juli.cpp:1408
It seems to be an error in vnl library, and it lies in
vnl_linpack_svdc() of vnl_svd.txx, but I can not find out the reason .
Do you have any idea?
Thanks
Siwei
Luis Ibanez wrote:
>
> Hi Siwei,
>
> There is no explicit limit to the number of landmarks in your
> KernelTransform class.
>
> The only limitation may arise from the VNL mathematical libraries
> that are used for computing the matrix operations of the Transform.
>
>
>
>
>
> Please do the following:
>
>
> 1) Compile your program in Debug mode,
>
> 2) Run it again and interrupt it as soon as you
> start seeing the output in the console.
>
> 3) Then look at the callstack.
> (if possible post it to the mailing list).
>
>
>
> From it we should be able to figure out where the
> messages are comming from.
>
>
>
> Thanks
>
>
> Luis
>
>
> ------------------
> Siwei Yang wrote:
>
>> Hi every body,
>> when I 'was using itk::ThinPlateSplineKernelTransform(actually
>> include all the classes inherited from itk::KernelTransform), I found
>> ,that there might be an upper limit for the number of
>> landmark-pairs. This limit is about 150-200 pairs. Sorry , that I can
>> 't say exactly, how much.
>> If I exceed this limt, for example 300, then I will get huge amount
>> of standard outputs, which almost floods my screen, just like
>> ............................................................
>> 0 52.00000 0 53.00000 0 53.00000 0
>> 54.00000 0 55.00000 0 55.00000 0 56.00000
>> 0 56.00000 0 57.00000 0 57.00000 0
>> 58.00000 0 58.00000 0 59.00000 0 59.00000
>> 0 60.00000 0 60.00000 0 61.00000 0
>> 61.00000 0 61.00000 0 62.00000 0 63.00000
>> 0 64.00000 0 64.00000 0 64.00000 0
>> 65.00000 0 66.00000 0 66.00000 0 67.00000
>> 0 68.00000 0 69.00000 0 70.00000 0
>> 70.00000 0 71.00000 0 72.00000 0 73.00000
>> 0 73.00000 0 74.00000 0 75.00000 0
>> 76.00000 0 77.00000 0 77.00000 0 78.00000
>> 0 79.00000 0 81.00000 0 82.00000 0
>> 83.00000 0 83.00000 0 84.00000 0 85.00000
>> 0 87.00000 0 88.00000 0 89.00000 0
>> 90.00000 0 91.00000 0 92.00000 0 93.00000
>> 0 94.00000 0 95.00000 0 96.00000 0
>> 98.00000 0 99.00000 0 100.00000 0
>> 101.00000 0 102.00000 0 1.00000 0
>> 1.00000 0 1.00000 0 1.00000 0 1.00000
>> 0 .................................................................
>> .....................................................................................................................................................................................................................................................................................................................................
>>
>> and I don't know , where they come from. Finally I 'll obtain a wrong
>> interpolation.
>> Because my application uses usually more than 3000 pairs landmarks
>> (3D), it would be ideal, if this could be allowed.
>> Did anyone have this problem? How can I do ?
>>
>>
>> Thank you very much
>> best wishes
>>
>> Siwei
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>
>
>
More information about the Insight-users
mailing list