醫(yī)學圖像配準中Spatial Transformer Networks
醫(yī)學圖像配準中,Spatial Transformer Networks(STN)是一個很好地把移動圖像按照變形場如何變換成和固定圖像一致的扭曲圖像的組件。
用公式描述為:,但是這里的
運算具體如何操作。網(wǎng)上好像并沒有詳細的介紹。

讓我們看看VoxelMorph官方寫的STN代碼,或許能理解一點。
有些不明所以,但是某些關鍵字仍然是可以看出來的。
例如src應該對應著圖像,flow應該對應著流場(注意不是變形場,變形場和流場概念不一樣)
博客
給出了正常的解答,但是對一些細節(jié)問題,沒有很好的詮釋。
我們來一一解答這些基本概念。

首先在forward方法中,首先出現(xiàn)的變量是grid,這個變量字面意思是網(wǎng)格或者格柵。但是具體是指什么,依然一無所知。
我們打開一個命令行,嘗試輸入如下代碼,最后打印grid的內容。
仔細觀察grid的輸出,發(fā)現(xiàn)一個有趣的現(xiàn)象:
看到這里,我相信有人反應過來了
論文中變形場如何定義的?
變形場=恒等映射+流場
好家伙,原來恒等映射是這個意思。
那么,變量new_locs意思是變形場
這里用我畢業(yè)論文中的圖描述一下二者的關系。


很明顯,這是歸一化到范圍內,根據(jù)官方文檔的解釋
grid_sample的坐標必須是歸一化為-1到1之間的。
接下來再看
看起來對維度進行交換,根據(jù)這兩個鏈接討論的結果
最大可能原因是grid_sample中xy軸定義方向是與現(xiàn)實xy軸顛倒的,不知道是內部代碼哪部分導致的。
基本流程已經(jīng)介紹完了。
好,最后來用我畢業(yè)論文中一張圖描述一下,具體工作原理如下

考慮極端情況,如果流場為0,那么變形場就是恒定映射,重采樣后扭曲圖像就是移動圖像。
用一句話描述STN原理:根據(jù)變形場的值(也就是坐標),抓取移動圖像對應坐標的像素,再分配到扭曲圖像上,而扭曲圖像(固定圖像)的坐標始終與變形場(流場)保持一致。
另外,如果抓取的坐標超出移動圖像的范圍,默認分配到扭曲圖像的值上為0;如果坐標是浮點數(shù),根據(jù)grid_sample的mode選擇最近鄰或者線性插值。

這也就是很多人不理解的為什么配準是移動圖像到固定圖像,得到了流場。但計算標記點的目標配準誤差(TRE)時,是固定圖像的標記點加上流場,再減去移動圖像的標記點,才是正確的計算方法。
如有錯誤,請大家在評論區(qū)指出來。