Shapeworks: MacOS์—์„œ "femur --groom_images"์™€ ์ถฉ๋Œ

์— ๋งŒ๋“  2021๋…„ 03์›” 25์ผ  ยท  23์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: SCIInstitute/ShapeWorks

$ python RunUseCase.py --use_case ๋Œ€ํ‡ด๊ณจ --groom_images

...

##### ์„ผํ„ฐ๋ง

์ž…๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/com_aligned/images/m03_L_1x_hip.isores.pad.com.nrrd
์ถœ๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/center/images/m03_L_1x_hip.isores.pad.com.center.nrrd
์ž…๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/com_aligned/images/m04_L_1x_hip.isores.pad.com.nrrd
.....
์ž…๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/com_aligned/images/n19_L_1x_hip.isores.pad.com.nrrd
์ถœ๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/center/images/n19_L_1x_hip.isores.pad.com.center.nrrd
์ž…๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/com_aligned/images/n19_R_1x_hip.reflect.isores.pad.com.nrrd
์ถœ๋ ฅ ํŒŒ์ผ ์ด๋ฆ„: Output/femur/groomed/center/images/n19_R_1x_hip.reflect.isores.pad.com.center.nrrd
zsh: ๋ถ„ํ•  ์˜ค๋ฅ˜ python RunUseCase.py --use_case ๋Œ€ํ‡ด๊ณจ --groom_images

์ด๊ฒƒ์€ RC10์ด ์„ค์น˜๋œ MacOS์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  23 ๋Œ“๊ธ€

tiny_test์™€ ์ถฉ๋Œํ•ฉ๋‹ˆ๊นŒ?

tiny_test๋Š” ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘์€ ํ…Œ์ŠคํŠธ์—์„œ ๋Œ€ํ‡ด๊ณจ๋งŒ ๋‚จ์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์‚ฌ๋œ ๋Œ€ํ‡ด๊ณจ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ๋‘ ๋ฒˆ ํ™•์ธํ–ˆ๋Š”๋ฐ Linux์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ ๋Œ€ํ‡ด๊ณจ 2๊ฐœ์™€ ์˜ค๋ฅธ์ชฝ ๋Œ€ํ‡ด๊ณจ 1๊ฐœ๋กœ tiny_test๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x000000016b8612ad libvnl_algo.dylib`vnl_qr<double>::vnl_qr(this=0x00007ffeefbfd568, M=0x00007ffeefbfd6f0) at vnl_qr.hxx:51:24 [opt]
    frame #1: 0x000000016b85cf1d libvnl_algo.dylib`double vnl_determinant<double>(M=<unavailable>, balance=<unavailable>) at vnl_determinant.hxx:107:14 [opt]
    frame #2: 0x00000003dec807ac _ITKIOImageBasePython.so`___lldb_unnamed_symbol9961$$_ITKIOImageBasePython.so + 252
    frame #3: 0x00000003deba7ff4 _ITKIOImageBasePython.so`___lldb_unnamed_symbol7056$$_ITKIOImageBasePython.so + 132
    frame #4: 0x00000003dec80586 _ITKIOImageBasePython.so`___lldb_unnamed_symbol9956$$_ITKIOImageBasePython.so + 38
    frame #5: 0x00000003dea1d188 _ITKIOImageBasePython.so`___lldb_unnamed_symbol1480$$_ITKIOImageBasePython.so + 1560
    frame #6: 0x00000003ded50753 _ITKIOImageBasePython.so`itk::ProcessObject::UpdateOutputInformation() + 351
    frame #7: 0x00000003dec7fec2 _ITKIOImageBasePython.so`___lldb_unnamed_symbol9945$$_ITKIOImageBasePython.so + 70
    frame #8: 0x00000003ded5b6f4 _ITKIOImageBasePython.so`itk::DataObject::Update() + 18
    frame #9: 0x000000041a65c177 _ITKCommonPython.so`___lldb_unnamed_symbol8759$$_ITKCommonPython.so + 58
    frame #10: 0x000000010002c843 python`_PyMethodDef_RawFastCallKeywords + 131
    frame #11: 0x000000010002c1d6 python`_PyObject_FastCallKeywords + 598
    frame #12: 0x0000000100164bb7 python`call_function + 455
    frame #13: 0x000000010015c604 python`_PyEval_EvalFrameDefault + 20180
    frame #14: 0x0000000100155f04 python`_PyEval_EvalCodeWithName + 532
    frame #15: 0x000000010002c5e3 python`_PyFunction_FastCallKeywords + 403
    frame #16: 0x0000000100164aa7 python`call_function + 183
    frame #17: 0x000000010015c604 python`_PyEval_EvalFrameDefault + 20180
    frame #18: 0x000000010002c535 python`_PyFunction_FastCallKeywords + 229
    frame #19: 0x0000000100164aa7 python`call_function + 183
    frame #20: 0x000000010015cdb0 python`_PyEval_EvalFrameDefault + 22144
    frame #21: 0x0000000100155f04 python`_PyEval_EvalCodeWithName + 532
    frame #22: 0x000000010002c5e3 python`_PyFunction_FastCallKeywords + 403
    frame #23: 0x0000000100164aa7 python`call_function + 183
    frame #24: 0x000000010015c604 python`_PyEval_EvalFrameDefault + 20180
    frame #25: 0x0000000100155f04 python`_PyEval_EvalCodeWithName + 532
    frame #26: 0x00000001001c1afb python`PyRun_FileExFlags + 235
    frame #27: 0x00000001001c14c6 python`PyRun_SimpleFileExFlags + 502
    frame #28: 0x00000001001ede30 python`pymain_run_file + 160
    frame #29: 0x00000001001ed72b python`pymain_run_filename + 123
    frame #30: 0x00000001001ecf11 python`pymain_run_python + 145
    frame #31: 0x00000001001ecb8b python`pymain_main + 27
    frame #32: 0x00000001000018c9 python`main + 89
    frame #33: 0x00007fff6aedfcc9 libdyld.dylib`start + 1
    frame #34: 0x00007fff6aedfcc9 libdyld.dylib`start + 1

#1168๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ITKIOImageBasePython.so๊ฐ€ ์ด ์Šคํƒ ์ถ”์ ์— ํ‘œ์‹œ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ shapeworks python ๋ฐ”์ธ๋”ฉ(์˜ˆ: Image ํด๋ž˜์Šค)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ์ผ๋ถ€ ๊ฒฝ๊ณ  lldb๋Š” ์ถฉ๋Œ ์ง์ „์— ๋ฑ‰์—ˆ์Šต๋‹ˆ๋‹ค.

2021-03-25 11:57:01.360622-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:01.360667-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.
2021-03-25 11:57:01.905525-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:01.905556-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.
2021-03-25 11:57:02.113545-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:02.113577-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.
2021-03-25 11:57:02.646500-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:02.646531-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.
2021-03-25 11:57:03.535838-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:03.535870-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.
2021-03-25 11:57:05.224328-0600 python[22532:5953417] dynamic_cast error 1: Both of the following type_info's should have public visibility. At least one of them is hidden. N3itk10DataObjectE, N3itk5ImageIfLj3EEE.
2021-03-25 11:57:05.224362-0600 python[22532:5953417] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N3itk10DataObjectE, N3itk5ImageIfLj3EEE, N3itk9ImageBaseILj3EEE.

์ขŒ์‹ฌ๋ฐฉ ์œ ์Šค ์ผ€์ด์Šค์˜ ์„ผํ„ฐ๋ง ๋‹จ๊ณ„์—์„œ๋„ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

๋””๋ฒ„๊ทธ์—์„œ๋„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ์ „์ฒด ์Šคํƒ ์ถ”์ ์„ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€ํ„ฐ
์ด๋ฏธ์ง€๋Š” itk::Image ShapeWorks ์ด๋ฏธ์ง€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ผ๋ถ€ ํ˜ธ์ถœ์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.
๋‹จ์ˆœํžˆ ์ตœ์ ํ™” ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ž˜์ „์— ๋ฉ€๋ฆฌ (๊ฐ€์ง€๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์Œ) ๋‚ด๊ฐ€ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋˜
build_dependencies์—์„œ itk์™€ ํ•จ๊ป˜ itk์˜ Python ๋ฐ”์ธ๋”ฉ, ํ•˜์ง€๋งŒ
์„ฑ๊ณต์ ์ธ. ํŠนํžˆ conda/pip๊ฐ€
ํŠนํžˆ itk python ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€ ๋ฒ„์ „์˜ ๋‹ค๋ฅธ ๋ฒ„์ „ ์„ค์น˜
๊ตฌ์„ฑ ์š”์†Œ(5.0 ๋ฐ 5.1), ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋…ธ๊ณจ์ ์ธ ๋ฐฉ๋ฒ•.

2021๋…„ 3์›” 25์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 11:59 Alan Morris @ . * >
์ผ๋‹ค:

  • ์Šค๋ ˆ๋“œ #1, ๋Œ€๊ธฐ์—ด = 'com.apple.main-thread', ์ค‘์ง€ ์ด์œ  = EXC_BAD_ACCESS(์ฝ”๋“œ=1, ์ฃผ์†Œ=0x0)

    • ํ”„๋ ˆ์ž„ #0: 0x000000016b8612ad libvnl_algo.dylib vnl_qr<double>::vnl_qr(this=0x00007ffeefbfd568, M=0x00007ffeefbfd6f0) at vnl_qr.hxx:51:24 [opt] frame #1: 0x000000016b85cf1d libvnl_algo.dylib ์ด์ค‘ vnl_determinant(M=, ๊ท ํ˜•=) vnl_determinant์—์„œ. hxx:107 :14 [์„ ํƒ]

      ํ”„๋ ˆ์ž„ #2: 0x00000003dec807ac _ITKIOImageBasePython.so ___lldb_unnamed_symbol9961$$_ITKIOImageBasePython.so + 252 frame #3: 0x00000003deba7ff4 _ITKIOImageBasePython.so ___lldb_unnamed_symbol7056$$_ITKIOImageBasePython.so + 132

      ํ”„๋ ˆ์ž„ #4: 0x00000003dec80586 _ITKIOImageBasePython.so ___lldb_unnamed_symbol9956$$_ITKIOImageBasePython.so + 38 frame #5: 0x00000003dea1d188 _ITKIOImageBasePython.so ___lldb_unnamed_symbol1480$$_ITKIOImageBasePython.so + 1560

      ํ”„๋ ˆ์ž„ #6: 0x00000003ded50753 _ITKIOImageBasePython.so itk::ProcessObject::UpdateOutputInformation() + 351 frame #7: 0x00000003dec7fec2 _ITKIOImageBasePython.so ___lldb_unnamed_symbol9945$$_ITKIOImageBasePython.so + 70

      ํ”„๋ ˆ์ž„ #8: 0x00000003ded5b6f4 _ITKIOImageBasePython.so itk::DataObject::Update() + 18 frame #9: 0x000000041a65c177 _ITKCommonPython.so ___lldb_unnamed_symbol8759$$_ITKCommonPython.so + 58

      ํ”„๋ ˆ์ž„ #10: 0x000000010002c843 ํŒŒ์ด์ฌ _PyMethodDef_RawFastCallKeywords + 131 frame #11: 0x000000010002c1d6 python _PyObject_FastCallKeywords + 598

      ํ”„๋ ˆ์ž„ #12: 0x0000000100164bb7 ํŒŒ์ด์ฌ call_function + 455 frame #13: 0x000000010015c604 python _PyEval_EvalFrameDefault + 20180

      ํ”„๋ ˆ์ž„ #14: 0x0000000100155f04 ํŒŒ์ด์ฌ _PyEval_EvalCodeWithName + 532 frame #15: 0x000000010002c5e3 python _PyFunction_FastCallKeywords + 403

      ํ”„๋ ˆ์ž„ #16: 0x0000000100164aa7 ํŒŒ์ด์ฌ call_function + 183 frame #17: 0x000000010015c604 python _PyEval_EvalFrameDefault + 20180

      ํ”„๋ ˆ์ž„ #18: 0x000000010002c535 ํŒŒ์ด์ฌ _PyFunction_FastCallKeywords + 229 frame #19: 0x0000000100164aa7 python call_function + 183

      ํ”„๋ ˆ์ž„ #20: 0x000000010015cdb0 ํŒŒ์ด์ฌ _PyEval_EvalFrameDefault + 22144 frame #21: 0x0000000100155f04 python _PyEval_EvalCodeWithName + 532

      ํ”„๋ ˆ์ž„ #22: 0x000000010002c5e3 ํŒŒ์ด์ฌ _PyFunction_FastCallKeywords + 403 frame #23: 0x0000000100164aa7 python call_function + 183

      ํ”„๋ ˆ์ž„ #24: 0x000000010015c604 ํŒŒ์ด์ฌ _PyEval_EvalFrameDefault + 20180 frame #25: 0x0000000100155f04 python _PyEval_EvalCodeWithName + 532

      ํ”„๋ ˆ์ž„ #26: 0x00000001001c1afb ํŒŒ์ด์ฌ PyRun_FileExFlags + 235 frame #27: 0x00000001001c14c6 python PyRun_SimpleFileExFlags + 502

      ํ”„๋ ˆ์ž„ #28: 0x00000001001ede30 ํŒŒ์ด์ฌ pymain_run_file + 160 frame #29: 0x00000001001ed72b python pymain_run_filename + 123

      ํ”„๋ ˆ์ž„ #30: 0x00000001001ecf11 ํŒŒ์ด์ฌ pymain_run_python + 145 frame #31: 0x00000001001ecb8b python pymain_main + 27

      ํ”„๋ ˆ์ž„ #32: 0x00000001000018c9 ํŒŒ์ด์ฌ main + 89 frame #33: 0x00007fff6aedfcc9 libdyld.dylib ์‹œ์ž‘ + 1

      ํ”„๋ ˆ์ž„ #34: 0x00007fff6aedfcc9 libdyld.dylib`start + 1

#1168๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
https://github.com/SCIInstitute/ShapeWorks/issues/1168

โ€”
๋‹น์‹ ์ด ์ง€์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/SCIInstitute/ShapeWorks/issues/1179#issuecomment-807193351 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJT3EKCRFSERHDJ5XDPHCDTFN2ZPANCNFSM4ZZUXDBQ
.

์—…๋ฐ์ดํŠธ. ์ข‹์•„, ๋‚˜๋Š” ํŒŒ์ด์ฌ ์ถœ๋ ฅ์— ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋‹ค. ๋” ์ด์ƒ์˜ ์ถœ๋ ฅ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ค‘์•™ ๋‹จ๊ณ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ๋‹ค. FindReferenceImage์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    dim = itk.GetArrayFromImage(itk.imread(inDataList[i])).shape

๋‚ด ์ƒ๊ฐ์— ๋ฌธ์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ITK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ‘Ž

์•„์ฃผ ์˜ค๋ž˜์ „์— (๋ถ„๊ธฐ๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ) build_dependencies์—์„œ itk์™€ ํ•จ๊ป˜ itk์˜ Python ๋ฐ”์ธ๋”ฉ์„ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ conda/pip๊ฐ€ ๋ฌธ์ œ์˜ ๋…ธ๊ณจ์ ์ธ ๋ ˆ์‹œํ”ผ์ธ itk python ๊ตฌ์„ฑ ์š”์†Œ(5.0 ๋ฐ 5.1)์˜ ์ผ๋ถ€(์ „๋ถ€๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ถ€)์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋” ์‹œ๋„ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ #1168์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฒ˜์Œ๋ถ€ํ„ฐ itkwidgets๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ITK๋กœ ๋นŒ๋“œ๋˜๋„๋ก ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ #1168์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฒ˜์Œ๋ถ€ํ„ฐ itkwidgets๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ITK๋กœ ๋นŒ๋“œ๋˜๋„๋ก ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ๋…ธํŠธ๋ถ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— LD_LIBRARY_PATH๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—…๋ฐ์ดํŠธ: ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๊ณ  ๊ฒฐ๊ณผ๋Š” ๋™์ผํ–ˆ์Šต๋‹ˆ๋‹ค
update2: ์ €๋Š” #1168 ์‚ฌ์šฉ ์‚ฌ๋ก€๋งŒ ์‹œ๋„ํ–ˆ๊ณ  ์ด๋ฒˆ ์‚ฌ๋ก€๋Š” ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

FindReferenceImage์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    dim = itk.GetArrayFromImage(itk.imread(inDataList[i])).shape

ShapeWorks๋Š” ์ด ํ˜ธ์ถœ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pdb ํ†ตํ•ด ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜์—ฌ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
python -m pub RunUseCase.py --use_case femur --groom_images (๊ทธ๋Ÿฐ ๋‹ค์Œ 'r'์„ ๋ˆŒ๋Ÿฌ ์‹คํ–‰)

(์ง€๊ธˆ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฝ๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)
์—…๋ฐ์ดํŠธ: ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ(~1์‹œ๊ฐ„) ์„ธ๊ทธ ์˜ค๋ฅ˜๋งŒ ๋ณด๊ณ ํ•˜๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ๋””๋ฒ„๊ฑฐ์— ๋‘์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๋œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” python ITK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋นŒ๋“œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ VXL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  * frame #0: 0x000000016b8612ad libvnl_algo.dylib`vnl_qr<double>::vnl_qr(this=0x00007ffeefbfd568, M=0x00007ffeefbfd6f0) at vnl_qr.hxx:51:24 [opt]
    frame #1: 0x000000016b85cf1d libvnl_algo.dylib`double vnl_determinant<double>(M=<unavailable>, balance=<unavailable>) at vnl_determinant.hxx:107:14 [opt]
    frame #2: 0x00000003dec807ac _ITKIOImageBasePython.so`___lldb_unnamed_symbol9961$$_ITKIOImageBasePython.so + 252
    frame #3: 0x00000003deba7ff4 _ITKIOImageBasePython.so`___lldb_unnamed_symbol7056$$_ITKIOImageBasePython.so + 132

ITK๊ฐ€ ์•„๋‹Œ ๋Œ€์ฒด VXL/VNL์„ ์‚ฌ์šฉํ•˜์—ฌ ITK๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. libvnl_algo.dylib ๋Š” ์šฐ๋ฆฌ ๊ฒƒ์ด๊ณ  _ITKIOImageBasePython.so ๋Š” conda์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์„ ํ˜ผํ•ฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@archanasri ์™€ ๋ฐฉ๊ธˆ ํฌํ•จ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ(๋‹ค์‹œ ํ…Œ์ŠคํŠธ #1168) ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
#1168 ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋‹จ์ˆœํžˆ itkwidgets๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ง€๊ธˆ ์‹œ๋„ ์ค‘์ž…๋‹ˆ๋‹ค).
์ด ๋ฌธ์ œ๋ฅผ ์œ„ํ•ด, ์šฐ๋ฆฌ๋Š”์— ITK๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์šฐ๋ฆฌ์˜ vnl ์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ฒ˜๋Ÿผ eigen ?

VXL์„ ์‚ฌ์šฉํ•˜๋Š” ITK๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

-DITK_USE_SYSTEM_VXL=on -DVXL_DIR=${INSTALL_DIR}

์—…๋ฐ์ดํŠธ. ์ข‹์•„, ๋‚˜๋Š” ํŒŒ์ด์ฌ ์ถœ๋ ฅ์— ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋‹ค. ๋” ์ด์ƒ์˜ ์ถœ๋ ฅ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ค‘์•™ ๋‹จ๊ณ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ๋‹ค. FindReferenceImage์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    dim = itk.GetArrayFromImage(itk.imread(inDataList[i])).shape

๋‚ด ์ƒ๊ฐ์— ๋ฌธ์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ITK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ‘Ž

python itk๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  shapeworks.Image.toArray()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ต์ฒดํ–ˆ๋‹ค

dim = itk.GetArrayFromImage(itk.imread(inDataList[i])).shape

~์™€ ํ•จ๊ป˜

img = Image(inDataList[i])
tmp = img.toArray()
dim = tmp.shape

์ง€๊ธˆ์€ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข‹์€ @archanasri. ๋„ค, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ python itk + ์šฐ๋ฆฌ itk๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ITK ํŒŒ์ด์ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— itkwidgets ๋ฌธ์ œ๊ฐ€ ๋” ํฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์šฐ๋ฆฌ๋Š” itkwidgets๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
itkwidgets๊ฐ€ ์šฐ๋ฆฌ์˜ itk๋ฅผ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์šฐ๋ฆฌ๋Š” itkwidgets๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
itkwidgets๊ฐ€ ์šฐ๋ฆฌ์˜ itk๋ฅผ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

itkwidgets 0.32.0(์ตœ์‹  ํƒœ๊ทธ ๋ฒ„์ „) setup.py์—์„œ ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    'install_requires': [
        'colorcet>=2.0.0',
        'itk-core>=5.1.0.post2',
        'itk-filtering>=5.1.0.post2',
        'itk-meshtopolydata>=0.6.2',
        'ipydatawidgets>=4.0.1',
        'ipywidgets>=7.5.1',
        'ipympl>=0.4.1',
        'matplotlib',
        'numpy',
        'six',
        'zstandard',
    ],

itk์˜ ๊ฒฝ์šฐ, ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๋ฅผ ํŒŒ์ด์ฌ ๋นŒ๋“œ๋กœ ๋˜๋Œ๋ ค๋†“์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด์— ์ ‘๊ทผํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ pip(๋Œ€๋ถ€๋ถ„) ๋ฐ conda์— ์˜ํ•ด ์„ค์น˜๋œ ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‚ด ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์ด ๋ชจ๋“  ๋ฒ„์ „์€ ๋ชจ๋‘ ์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(shapeworks) cam<strong i="15">@ananda</strong>:~/code/ShapeWorks/ShapeWorks/Examples/Python$ conda list | grep itk
itk                       5.0.1                    pypi_0    pypi
itk-core                  5.1.2                    pypi_0    pypi
itk-filtering             5.1.2                    pypi_0    pypi
itk-io                    5.0.1                    pypi_0    pypi
itk-meshtopolydata        0.6.3                    pypi_0    pypi
itk-numerics              5.1.2                    pypi_0    pypi
itk-registration          5.0.1                    pypi_0    pypi
itk-segmentation          5.0.1                    pypi_0    pypi
itkwidgets                0.32.0                   pypi_0    pypi
(shapeworks) cam<strong i="16">@ananda</strong>:~/code/ShapeWorks/ShapeWorks/Examples/Python$ conda list | grep ipy
brotlipy                  0.7.0           py37hf967b71_1001    conda-forge
ipycanvas                 0.8.2                    pypi_0    pypi
ipydatawidgets            4.2.0                    pypi_0    pypi
ipyevents                 0.8.2                    pypi_0    pypi
ipykernel                 5.5.0            py37he01cfaa_1    conda-forge
ipympl                    0.7.0                    pypi_0    pypi
ipython                   7.21.0           py37he01cfaa_0    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipyvtk-simple             0.1.4                    pypi_0    pypi
ipywidgets                7.6.3                    pypi_0    pypi

ํ•˜๋‚˜์˜ ์œ„ํ—˜ ์‹ ํ˜ธ๋Š” itk-io, -registration, -segmentation, ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค๋„ itk ์ž์ฒด์˜ 5.0.1 ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” pip ์„ค์น˜๋ฅผ ์ตœ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ (์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์—†๋Š” ์–ด๋–ค ์ด์œ ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๊ฒƒ์„ ์ œ์ณ๋‘๊ณ ) ๋ชจ๋“  ์ข…์†์„ฑ์„ ์žฌ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. #1168์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฑฐ๊ธฐ์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •๋œ.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰