こんどよむ

International telepathology consultation: Three years of experience between the University of Pittsburgh Medical Center and KingMed Diagnostics in China
Chengquan Zhao, Tao Wu, Xiangdong Ding, Anil V Parwani, Hualin Chen, Jeffrey McHugh, Anthony Piccoli, Qinling Xie, Gonzalo Romero Lauro, Xiaodong Feng, Douglas J Hartman, Raja R Seethala, Shangwei Wu, Samuel Yousem, Yaoming Liang, Liron Pantanowitz

http://www.jpathinformatics.org/article.asp?issn=2153-3539;year=2015;volume=6;issue=1;spage=63;epage=63;aulast=Zhao

【Python】四角形の重複した部分

matplotlibでRectangleを2つ描画する時に重複している部分の四角形を描画する.
intersectionというらしい.

まずは適当な四角形を作る.

recs=[]
recs.append(matplotlib.patches.Rectangle((10,10),300,60, color='r', fill=False))
recs.append(matplotlib.patches.Rectangle((5,5),20,20, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((150,5),20,20, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((300,5),20,20, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((5,55),20,20, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((150,55),20,20, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((300,55),20,20, color='b', fill=False))

recs.append(matplotlib.patches.Rectangle((200,90),100,90, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((100,100),300,20, color='b', fill=False))

recs.append(matplotlib.patches.Rectangle((100,200),100,60, color='b', fill=False))
recs.append(matplotlib.patches.Rectangle((80,160),160,130, color='b', fill=False))

描画する.

fig = plt.figure()
ax = fig.add_subplot(1,1,1,xlim =500,ylim=300)
for rec in recs:
    ax.add_patch(rec)
plt.show()

f:id:icri:20150822222015p:plain

それぞれの四角形に関して,重なってるかどうか総当りで判定する.
重なってるならh=1,重なってないならh=0.

for f in recs:
    for s in recs:
        if f == s:
            pass
	else:
            h = f.get_path().intersects_path(s.get_path())

重なっている四角形を再度作りなおす.

nr = []
if h == 1:
    fx = f.get_x()
    fy = f.get_y()
    fw = f.get_width()
    fh = f.get_height()
    sx = s.get_x()
    sy = s.get_y()
    sw = s.get_width()
    sh = s.get_height()
    if fx <= sx and fy <= sy and fx+fw <= sx+sw and sx <= fx+fw and fy+fh <= sy+sh and fy+fh >= sy:
        nr.append(matplotlib.patches.Rectangle((sx,sy),fx+fw-sx,fy+fh-sy,color='gray',fill=True,alpha =0.9))
    if fx >= sx and fy <= sy and fx+fw >= sx+sw and fx <= sx+sw and fy+fh <= sy+sh and fy+fh >= sy:
        nr.append(matplotlib.patches.Rectangle((fx,sy),sx+sw-fx,fy+fh-sy,color='green',fill=True,alpha =0.9))
    if fx <= sx and fy <= sy and fx+fw >= sx+sw and fy+fh <= sy+sh and fy+fh >= sy:
        nr.append(matplotlib.patches.Rectangle((sx,sy),sw,fy+fh-sy,color='black',fill=True,alpha =0.9))
    if fx <= sx and fy >= sy and fx+fw >= sx+sw and sy+sh >= fy and sy+sh<=fy+fh:
        nr.append(matplotlib.patches.Rectangle((sx,fy),sw,sy+sh-fy,color='r',fill=True,alpha =0.9))
    if fx > sx and fy >= sy and fx+fw <= sx+sw and fy+fh <= sy+sh:
        nr.append(matplotlib.patches.Rectangle((fx,fy),fw,fh,color='c',fill=True,alpha =0.9))
    if sx < fx and fy <= sy and sy <= fy+fh and fy+fh >= sy+sh and sx+sw >= fx+fw:
        nr.append(matplotlib.patches.Rectangle((fx,sy),fw,sh,color='y',fill=True,alpha =0.9))

それを描画する.
f:id:icri:20150822222753p:plain

【論文】HCCの自動分類の精度を上げる

2014年の日本の論文.
Enhancing Automatic Classification of Hepatocellular Carcinoma Images through Image Masking, Tissue Changes, and Trabecular Features

肝組織のHE染色スライドを用いて肝生検の組織形態を計測するシステムを作り出して,HCCの診断を補助することが目的.以前にもKiyuna et alが13個の核と構造的な特徴からHCCを自動的に分類するシステムを作成しているが,この論文ではさらに特徴を追加し(索状形態,trabecular morphology)精度の向上を図っている.

方法としては上記の以前提示されたプロセスの11個の組織変化の特徴(脂肪変性,細胞質の色,細胞の明瞭度インデックス,間質)に加えて索の特徴を利用して分類を行った.また間質のセグメンテーションにより得られたマスクを画像に適用し結局177個の特徴を抽出している.

1054個のHCC生検サンプルと1076個の手術で切除されたサンプルを用いて,5-fold cross validation SVMLibSVM)を利用して分類している.

結果としては新しい特徴量を盛り込むことにより精度が上がった.生検サンプルでは感度が84.7から88.2%に上昇,特異度は変わらなかった.手術サンプルではwell-differentiatede tumors(Edmondson Grade 1)の検出精度が65%→77.5%に上昇した.

【論文】【Python】前立腺病理画像のGrade分類ー1ー

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3017375/

アブストラクト

前立腺癌は前立腺外線に発生する.Gleasonスコアは前立腺癌の予後の重要な因子であり治療にも非常に重要である.
しかしGleasonスコアの人による判断は施設によって異なりまたエラーが起こりやすい.よってテクスチャー分類による自動Gleason分類を行うことがこの研究の目的でありる結果としてはGleason Grade 3と4の分類に効果的であった.方法としてはそれぞれのピクセルのtextonを抽出してRandomForestsを利用してクラスタリングを行い,空間ピラミッド一致カーネルSVMを利用して分類を行っている.

前立腺癌のグレード分類は多く試されているようであるが,全体のテクスチャを利用するだけ,構造的な特徴を利用するだけ,cross-validationに利用するサンプルが少ない,Gleasonの厳密な分類ではなくLow-gradeかHigh-Gradeかを判断させるだけ,といった制約があるとこの論文では紹介されている.

試行

Texture ClassificationではRoot Filter Setに含まれるMaximum Response 8 Filter Bank(MR-8,徐々に回転させたFilter-Bank+Gaussian,LOG)を利用し,そのフィルタを画像に通した場合のMaximum Responseをプロットしている.今回Wikipediaの前立腺癌Gleason Grade 3の画像をこのフィルタに通してみた.

グリーソン分類 - Wikipedia
f:id:icri:20150815180026j:plain

Gaussian

f:id:icri:20150815183408p:plain

Laplacian Of Gaussian

f:id:icri:20150815183411p:plain

【論文】GLCM Featuresを利用した脳腫瘍分類

GLCM textual features for Brain Tumor Classification
(2012,Zulpe International Journal of Computer Science)

GLCMを利用して脳腫瘍を分類した2012年のインドの論文.

ClassIとしてアストロサイトーマ(星細胞腫),ClassIIとしてMeningioma(髄膜腫),ClassIIIとして気管支原性癌の転移,ClassIVとして肉腫を分類している.それぞれのクラスに対してWholeBrainAtlas(WBA)からそれぞれ20サンプル,計80サンプルを利用し,GLCMによる特徴抽出を行い分類している.

結果はAccuracyがClassI,II,III,IVでそれぞれ100%,100%,95%,95%となっている.

【論文】病理画像分析による神経膠腫のグレード自動分類

またPathology Informaticsの論文である.
組織の画像中でネクローシスを起こしている部分を抽出するのが主目的となっている.ネクローシスを起こしている部分は大体生存している細胞に欠けた部分の周りに,細胞が円を作って整列している.この論文のエッセンスとしては細胞を分節化し,細胞数のプロファイルを作成してネクローシスを発見することである.

組織病理学での細胞のsegmentationの自動化は基本的に難しい.それは画像が様々な条件から一定ではないからである.大体がスレッショルディング,特徴の抽出,形態学的なフィルタリング,そして領域をマッピングするといった手順をとる.この論文では様々なスレッショルディングを融合し,また形態的なフィルタリングを施行している.

Automated discrimination of lower and higher grade gliomas based on histopathological image analysis Mousavi HS, Monga V, Rao G, Rao AU - J Pathol Inform

細胞のスレッショルディングによる抽出は下のようなチュートリアルが存在している.このチュートリアルではmahotasを利用している.(PythonVision)
Tutorial

細胞数のプロファイルの作成は小さいピクセルに分割した画像から細胞数をカウントし,それらをマッピングすることで作成されている.
こういうプロファイル,画像を作成してみたい.

この論文では
(1)上記のcell profileからネクローシスを起こしている部分を同定
(2)微小血管の増生をフィルタリングで同定

どちらもdecision treeを利用している.
ネクローシスもしくは微小血管の増生(MVP)がいずれかのスライドに存在していた場合,そのスライドをHigh-Grade Glioma(HGG)と分類する.
結果としてはネクローシスネクローシスとして95.2%認識,NotNecrosisをNotNecrosisとして82.9%認識,MVPをMVPとして75%認識し,NotMVPをNotMVPとして73.6%認識した.

またこの手法を用いた場合に,WND-CHARM featureを利用した場合と比べてHGGをHGGと認識したのは66.6%に対して88.2%,LGGをLGGと認識したのは70.1%に比して82.8%とWND-CHARMを上回る結果となっている.

【Python】pycudaインストール時のエラー

src/cpp/cuda.hpp:14:18: fatal error: cuda.h: そのようなファイルやディレクトリはありません
   #include <cuda.h>

pycudaをインストールしようとしたときこのエラーがでる.
原因はパスが通っていないから.PATHを以下のように通してから

PATH=/usr/local/cuda-7.0/bin:$PATH
pip install chainer-cuda-deps

これで通った.