天天看點

醫學四視圖-003-解決圖像反轉(失敗)

醫學四視圖-003-解決圖像反轉(失敗)

先說結論,本文最終也沒有解決圖像反轉問題,僅僅是過程記錄。咨詢了老大,老大說以我的能力,暫時還搞不定,是以就暫時先擱置。

電梯

1 都是示範的錯

2 編譯MITK2.21.2

3 找問題原因

3.1vtkResliceCursorLineRepresentation

3.1.1GetRepresentation

3.1.2SetSliceOrientation

☞ 源碼

哎呀,今天可是丢人大方了,今天博士來公司了,我興匆匆的去嘚瑟下,告訴博士我實作了四視圖了,博士說那就給我示範下呗,我這就麻溜的打開我的工程,示範起來,結果,呵呵哒。

醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)

其實編譯MITK完全是吃飽了撐的,因為不用編譯,就可以看到源碼,我還是編譯了,并且折騰了好久,連結在這裡,當你掌握了,就簡單了,真的簡單,曾經也在多個夜晚罵MITK團隊,搞得啥破玩意,最後發現小醜竟是自己哈哈。其實編譯MITK是想看看人家是怎麼實作的。

https://blog.csdn.net/z609932088/article/details/118831590?spm=1001.2014.3001.5502

在讀取DICOM檔案的時候,我使用的是vtkDICOMImageReader,而且用法也很簡單,代碼如下,這裡不是出問題的地方,而且我也通過另外一個例子證明了。

醫學四視圖-003-解決圖像反轉(失敗)

到了懷疑的地方了,這裡rep->GetResliceCursorActor()->GetCursorAlgorithm()->SetReslicePlaneNormal(i);,如果把這句話注釋掉的話,那就會報錯誤Resetting view-up since view plane normal is parallel,這個錯誤裡面有一個關鍵字view-up,通過有道翻譯出來的也不咋懂,重置視圖,因為視圖平面法線是平行的

for (int i = 0; i < 3; i++)
        {
            vtkResliceCursorLineRepresentation *rep =
                vtkResliceCursorLineRepresentation::SafeDownCast(riw[i]->GetResliceCursorWidget()->GetRepresentation());
            riw[i]->SetResliceCursor(riw[0]->GetResliceCursor());
            rep->GetResliceCursorActor()->GetCursorAlgorithm()->SetReslicePlaneNormal(i);
            riw[i]->SetInputData(reader->GetOutput());
            riw[i]->SetSliceOrientation(i);
//            riw[i]->SetResliceModeToAxisAligned();
            riw[i]->SetResliceModeToOblique();

        }
      
醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)

後面我又開始研究SetSliceOrientation,源碼如下:

測試這個接口是有影響,但是呢,運作就當機,好尴尬。

/**
   * Set/get the slice orientation
   */

  enum
  {
    SLICE_ORIENTATION_YZ = 0,
    SLICE_ORIENTATION_XZ = 1,
    SLICE_ORIENTATION_XY = 2
  };

  vtkGetMacro(SliceOrientation, int);
  virtual void SetSliceOrientation(int orientation);
  virtual void SetSliceOrientationToXY()
    { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_XY); };
  virtual void SetSliceOrientationToYZ()
    { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_YZ); };
  virtual void SetSliceOrientationToXZ()
    { this->SetSliceOrientation(vtkImageViewer2::SLICE_ORIENTATION_XZ); };
      

在使用原生Demo測試時候,也是會出現錯誤,VS報告如下:這個Qt就得出來背鍋了,不明白的就是為什麼設定按照順序012可以,倒過來就不可以呢,費解,發生這個問題後面找到了解決方法,就是換Qt版本,目前我雖然使用了5.14.2 的殼子,但是核心還是5.7.1 這個版本的的問題還真是多,也不知道算不算是BUG。

醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)
醫學四視圖-003-解決圖像反轉(失敗)

繼續閱讀