在拍攝脊柱或胸片時,經常會遇到因裝置高度不夠需要分段拍攝的情況,
對於影像科診斷查閱影像時希望將分段影像合併成一張影像,有助於更直觀的觀察病灶,
以下圖為例的兩個分段影像:
我們使用OpenCVSharp中的Stitcher類的Stitch方法,匯入兩張影像並拼接:
但結果卻失敗了,返回錯誤結果:ERR_NEED_MORE_IMGS,是由於醫學影像的特徵點匹配不夠,導致無法確定對接點。
一幅圖中總存在著一些獨特的畫素點,這些點我們可以認為就是這幅圖的特徵,即為特徵點
獲取一幅圖中存在的一些獨特的畫素點,需要解決兩個問題:
- 解決尺度不變性問題,不同大小的圖片獲取到的特徵是一樣的
- 提取到的特徵點要穩定,能被精確定位
可參考本系列文章:C#處理醫學影像(三):基於漫水邊界自動選取病灶範圍的實現思路
根據演算法原理得到如下結果:
Sobel運算元:
根據演算法原理得到如下結果:
其中直觀區別是canny運算元計算的結果清晰,但不連續,容易受噪點影響,而sobel運算元線條相對柔和,連續性強。
⑤背景降噪
進行一次手動背景降噪,使得展現的無用邊緣更少,結果更清晰:
經過上述的一系列處理步驟後我們再次合併拼接:
Mat srcImg1 = imgList1[0]; Mat srcImg2 = imgList1[1]; Mat[] images = new Mat[] { srcImg1, srcImg2}; Stitcher stitcher = Stitcher.Create(Stitcher.Mode.Panorama); Mat pano = new Mat(); var status = stitcher.Stitch(images, pano); if (status != Stitcher.Status.OK) { ShowMsg.Box("拼接異常(" + status.ToString() + "),請重試。", BoxType.Msg, 120, this); return; }
得到了正確的結果: