Pyradiomics: ๋งค์šฐ ํฐ ๋ถ„ํ• ์„ ์œ„ํ•œ PyRadiomics ํ”„๋กœํŒŒ์ผ๋ง

์— ๋งŒ๋“  2017๋…„ 05์›” 17์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AIM-Harvard/pyradiomics

์ „์ฒด ๋งˆ์Šคํฌ๊ฐ€ ์žˆ๋Š” brain1 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(256x256x25 ๋ณต์…€)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PyRadiomics ํ”„๋กœํŒŒ์ผ๋ง

  • ๋ชจ๋“  ๊ธฐ๋Šฅ
  • ์›๋ณธ, LoG(์‹œ๊ทธ๋งˆ 1, 3 ๋ฐ 5), ์›จ์ด๋ธ”๋ฆฟ(1 ๋ ˆ๋ฒจ, 8 ๋ถ„ํ•ด)

์ฃผ์š” ๋ณ‘๋ชฉ ํ˜„์ƒ:

  • GLSZM 12x ๊ณ„์‚ฐ๋œ ๋งคํŠธ๋ฆญ์Šค: ํ•„์š”ํ•œ ์‹œ๊ฐ„์˜ 76.9%(+/- ์ด 22๋ถ„, ๊ณ„์‚ฐ๋‹น 1.86๋ถ„)
  • ShapStatistics ์ด๋ฏธ์ง€ ํ•„ํ„ฐ(SimpleITK์—์„œ ๊ตฌํ˜„): ํ•„์š”ํ•œ ์‹œ๊ฐ„์˜ 16.7%(+/- 5๋ถ„), ํ•œ ๋ฒˆ๋งŒ ์ ์šฉ๋จ

profiling_full_mask

cc @Radiomics/๊ฐœ๋ฐœ์ž

enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@JoostJM ์„ ํ™•์ธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

@blezek ์ €๋Š” @Radiomics/๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ „์ฒด ๋‘๋‡Œ์—์„œ radiomics๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ @JoostJM ์€ ์•ฝ๊ฐ„์˜ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

glszm ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๋ฉด ๊ตฌํ˜„์„ ์ตœ์ ํ™”ํ•  ์—ฌ์ง€๊ฐ€ ๋งŽ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

C ์ฝ”๋“œ์—์„œ? ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

C ์ฝ”๋“œ์—์„œ? ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์Šค๋ ˆ๋“œ ์‚ฌ์šฉ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ฐ”๋‹๋ผ C ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์Šค๋ ˆ๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

ITK ํ•„ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ITK ์›๊ฒฉ ๋ชจ๋“ˆ). ๊ทธ๋Ÿฌ๋ฉด ๊ด€๋ จ ๊ต์ฐจ ํ”Œ๋žซํผ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ์Šค๋ ˆ๋”ฉ API๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋Š” SimpleITK๋ฅผ ํ†ตํ•ด ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thewtex @jbvimort ํ†ต์ฐฐ๋ ฅ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ...

๋ผ์ธ๋ณ„ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์ง€๋งŒ ๋‚ด ์ƒ๊ฐ์— ์ด ์ค‘์ฒฉ ๋ฃจํ”„ ์„ธํŠธ ๋Š” ๊ฝค ๋Š๋ฆฝ๋‹ˆ๋‹ค. numpy.where๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Š๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธด ์ขŒํ‘œ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ”ฝ์…€์ด ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ์ž‘์—…์ด ์Šค๋ ˆ๋“œ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” Jc์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋™์ผํ•œ ์ž‘์—…์˜ SimpleITK ๊ตฌํ˜„์ด ํ›จ์”ฌ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋จผ์ € ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ธฐ์กด Python ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@pieper ํ”„๋กœํŒŒ์ผ๋ง์—์„œ Joost๊ฐ€ ์ด๋ฏธ _calculateCMatrix ๊ฐ€ ์‹œ๊ฐ„์˜ 77%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค(ํ”„๋กœํŒŒ์ผ๋ง ์š”์•ฝ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•˜๋Š” ๊ฒฝ์šฐ).

image

๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ์ด ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๊ฝค ๊ณ„์‚ฐ ์ง‘์•ฝ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ์ •๋ง ์œ ์ตํ•˜๊ณ  ํฐ ์ด๋ฏธ์ง€ ๋งˆ์Šคํฌ๊ฐ€ ์ค‘์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๊ฒฝ์šฐ "๋‹จ์ˆœํ•œ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ" ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ ์–ด๋„ ํ˜„์žฌ ์ž‘์„ฑ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C ์ฝ”๋“œ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์Šค๋ ˆ๋”ฉ ๋˜๋Š” SimpleITK ๊ตฌํ˜„๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์˜ต์…˜์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pieper @fedorov , ์ •๋ง ์ด ์ „ํ™” ์ž…๋‹ˆ๋‹ค. ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด 2๊ฐ€์ง€ ์ด์œ ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  1. ์ด๊ฒƒ์€ C ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ์—ฌ๋Ÿฌ ํ™˜์ž์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”์ถœํ•  ๋•Œ ํ™˜์ž ์ˆ˜์ค€(๊ฐ ํ™˜์ž 1๊ฐœ ์Šค๋ ˆ๋“œ)์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์œผ๋กœ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ™˜์ž ์ถ”์ถœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด SimpleITK๋„ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ c GLSZM์ด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ๊ณ„์‚ฐ ์ง‘์•ฝ์ ์ด๋ฉฐ 12๋ฒˆ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋‹ค๋ฅธ ํŒŒ์ƒ ์ด๋ฏธ์ง€๋กœ ์ธํ•ด). SimpleITK์˜ labelshapestatistics ์ด๋ฏธ์ง€ ํ•„ํ„ฐ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ๋‹จ์ผ ํ˜ธ์ถœ์— ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ ์ถ”์ถœ๋‹น ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(๋ชจ์–‘์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ์›๋ณธ ์ด๋ฏธ์ง€ ์œ ํ˜•์—์„œ๋งŒ ๊ณ„์‚ฐ๋จ).

SimpleITK ํ˜ธ์ถœ์€ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Feret ์ง๊ฒฝ(์ตœ๋Œ€ 3D ์ง๊ฒฝ)์„ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด ์ง๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  labelshapestatistics ์ด๋ฏธ์ง€ ํ•„ํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ „์ฒด brain1 ๋งˆ์Šคํฌ์— ๋Œ€ํ•ด 21ms ๋Œ€ 271053ms์˜ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์—ฌ๊ธฐ์— ๋„์›€์ด ๋  ์ˆ˜ itk-texturefeatures ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@JoostJM itk-texturefeatures ๋ณด์…จ๋‚˜์š”? ์†๋„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋น„๊ต๋˜๊ณ  ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ํ˜„์žฌ pyradiomics c ์ฝ”๋“œ์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/InsightSoftwareConsortium/ITKTextureFeatures/tree/2b4544fe39e0ece9007a0d87c396c8586c6f4df5/example

@pieper , ํœด๊ฐ€์—์„œ ๋ง‰ ๋Œ์•„์™”์ง€๋งŒ ์ด๊ฒƒ์€ ํ™•์‹คํžˆ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.
PyRadiomics ๋ฐ ITK ํ…์Šค์ฒ˜ ๊ธฐ๋Šฅ(๋ณต์…€ ํ˜„๋ช…ํ•œ ๊ณ„์‚ฐ ๊ตฌํ˜„)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์œ ์‚ฌํ•œ ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋ผ๋ฏธ๋“œ ์„ฑ๋Šฅ์€ ITK์˜ ์„ฑ๋Šฅ๊ณผ ์œ ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
PyRadiomics์˜ ๋‹จ์ ์€ 3D ์ž…๋ ฅ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด ITK๋Š” N์ฐจ์›์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— PyRadiomics๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ชจ๋“œ์—์„œ ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๊ณ  GLCM์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„ธํŠธ ์ธก๋ฉด์—์„œ ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ณต์‹ ์ •์˜๋Š” ์œ ์‚ฌํ•˜๋ฉฐ PyRadiomics๋Š” GLCM๊ณผ GLRLM ๋ชจ๋‘์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ITK์˜ ํ…์Šค์ฒ˜ ๊ธฐ๋Šฅ์—๋Š” PyRadiomics์— ์—†๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ(GLCM์—์„œ)์ด ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ITK์—์„œ Haralick's correlation ๋กœ ์กด์žฌํ•˜๋Š” PyRadiomics์˜ correlation ์˜ ์œ ์‚ฌํ•œ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ์ฆ‰, ITK๊ฐ€ PyRadiomics์˜ ๊ณ ์ •๋œ ๋นˆ ๋„ˆ๋น„์™€ ๋ฐ˜๋Œ€๋กœ ๊ณ ์ •๋œ ๋นˆ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@JoostJM ์„ ํ™•์ธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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