日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VTK教程系列:VTK基础及应用开发教程

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VTK教程系列:VTK基础及应用开发教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 由于OpenCV不能使用,只能使用VTK庫的圖像處理庫,暫時還沒有找到其他可以全面替代的庫;

? ? ? ?CSDN東靈工作室:http://blog.csdn.net/www_doling_net/article/details/8763686


復制其第一篇:

注:以后將陸續分享一些對經典圖像、圖形算法的介紹,

新浪微博:?@東靈工作室

郵箱:www_doling_net@163.com

ITK、VTK研究群:209215671

?

系列一 《VTK基礎及應用開發教程》

基礎入門篇:

1.????????從零開始學習VTK

2. ? ? ???VTK編譯安裝

3.????????VTK基礎概念

1)??????VTK基礎概念(1)

2)??????VTK基礎概念(2)

4.????????VTK可視化管線

1)??????VTK可視化管線(1)

2)??????VTK可視化管線(2)

5.????????VTK在圖像處理中的應用

1)??????VTK在圖像處理中的應用(1)

2)??????VTK在圖像處理中的應用(2)

3)??????VTK在圖像處理中的應用(3)

4)??????VTK在圖像處理中的應用(4)

5)??????VTK在圖像處理中的應用(5)

6)??????VTK在圖像處理中的應用(6)

7)??????VTK在圖像處理中的應用(7)

8)??????VTK在圖像處理中的應用(8)

9)??????VTK在圖像處理中的應用(9)

6.????????VTK基本數據結構

1)??????VTK基本數據結構(1)

2)??????VTK基本數據結構(2)

3)??????VTK基本數據結構(3)

4)??????VTK基本數據結構(4)

5)??????VTK基本數據結構(5)

高階應用篇:

7. ? ? ?基于VTKQt應用程序開發

8.??????基于VTK&ITKQt應用程序開發

9.??????基于VTKMFC應用程序開發

1)??????基于VTKMFC應用程序開發(1)

2)??????基于VTKMFC應用程序開發(2)

3)??????基于VTKMFC應用程序開發(3)


基于VTK的Qt應用程序開發

分類:?VTK應用示例?1916人閱讀?評論(23)?收藏?舉報 VTKQtCMake

目錄(?)[+]

VTK附帶的程序示例中大多是基于控制臺的,作為可視化開發工具包,VTK也可以與很多流行的GUI開發工具整合,比如MFC、Qt(題外話:Qt已經被Digia從諾基亞手中收購了,Qt現在的鏈接是:http://qt-project.org/,也有已經編譯好的版本:http://code.google.com/p/qt-msvc-installer/downloads/list直接下載安裝。可能因為大學課程里會教授MFC的內容,一些非計算機專業的會偏向于采用MFC,個人覺得,對于非計算機專業而言,如果一定要選擇一種GUI工具做開發的話,建議用Qt,容易上手,學習周期短)、FLTK(http://www.fltk.org/,FLTK也是跨平臺的,是一種比較輕便的GUI工具,VTK官方發布版本沒有提供對FLTK的接口,但可以借助類vtkFlRenderWindowInteractor,來實現VTK與FLTK的整合)等等,VTK的源碼目錄里(VTK-5.10\Examples\GUI)包含有VTK與Qt、MFC、Tcl等工具的整合。考慮到VTK對Qt的特殊照顧(VTK提供了很多針對Qt的類可以非常方便地與Qt整合),以及Qt自身的一些性質(如易用性、跨平臺等),我們參考了VTK自帶的一些例子,給出了VTK與Qt整合的詳細步驟。

1.???CMakeLists.txt文件

我們已經知道了VTK工程的管理是用CMake的,而Qt自身有qmake工具,如果對于一些小工程而言,單純的Qt程序用qmake來構建工程,確實很方便,但如果隨著工程復雜度的增加以及工程依賴其他的函數庫時,使用CMake來管理工程或許是一個明智的選擇。而且隨著你對CMake語法的了解,你會發現用CMake來管理工程是一件非常棒的事情。

我們先看看對于單純的Qt工程,怎么來寫CMakeLists.txt腳本文件。

1.1 用CMake來管理Qt工程

官方對于這個話題給出的解釋在這里。我們引用一下這篇博文的圖,然后給出每句CMakeLists.txt腳本的注釋,結合這個圖以及腳本的注釋,相信你應該能明白了。

?

[plain]?view plaincopy
  • #----------------------------------------------??
  • #?下面這兩行,沒什么好解釋的??
  • cmake_minimum_required(?VERSION?2.8?)??
  • project(?YourProjectName?)??
  • ???
  • #----------------------------------------------??
  • #?下面這兩行,也沒什么好解釋的??
  • find_package(?Qt4?REQUIRED?)??
  • include(?${QT_USE_FILE}?)??
  • ???
  • #----------------------------------------------??
  • #?程序所有源文件。<TODO:在此處添加源文件>??
  • #?定義變量Project_SRCS,其值為所列的文件列表??
  • SET(?Project_SRCS??
  • ????main.cpp??
  • ??)??
  • ???
  • #----------------------------------------------??
  • #?程序所有UI文件。<TODO:在此處添加UI文件>??
  • #?定義變量Project_UIS,其值為所列的文件列表??
  • SET(?Project_UIS??
  • ????YourQtWindows.ui??
  • )??
  • ???
  • #----------------------------------------------??
  • #?所有包含Q_OBJECT的頭文件。<TODO:在此處添加頭文件>??
  • #?定義變量Project_MOC_HDRS,其值為所列的文件列表??
  • SET(?Project_MOC_HDRS??
  • ????YourQtProjectFiles.h??
  • )??
  • ???
  • #-----------------------------------------------??
  • #?通過Qt的uic.exe生成UI文件對應的ui_XXXX.h文件??
  • #?將生成的ui_XXXX.h文件放在變量Project_UIS_H里,??
  • #?QT4_WRAP_UI就是干這個事情。??
  • QT4_WRAP_UI(?Project_UIS_H?${Project_UIS}?)??
  • ???
  • #-----------------------------------------------??
  • #?通過Qt的moc.exe生成包含Q_OBJECT的頭文件對應的??
  • #?moc_XXXX.cxx文件,將生成的moc_XXXX.cxx文件放在??
  • #?變量Project_MOC_SRCS里。QT4_WRAP_CPP就是干這個事情。??
  • QT4_WRAP_CPP(?Project_MOC_SRCS?${Project_MOC_HDRS}?)??
  • ???
  • #-----------------------------------------------??
  • #?Qt的MOC和UIC程序生成的moc_XXXX.cxx和ui_XXXX.h??
  • #?等文件是存放在CMake的“Where?to?build?the?binaries"??
  • #?里指定的目錄里,所以必須都這些路徑包含進來。??
  • INCLUDE_DIRECTORIES(?${Project_SOURCE_DIR}??
  • ?????????????????????${CMAKE_CURRENT_BINARY_DIR}??
  • ???????????????????)??
  • ???
  • #-----------------------------------------------????????????????????????????
  • #?Qt程序如果有資源文件(*.qrc),要包含資源文件,??
  • #?然后用Qt的rcc.exe生成相應的qrc_XXXX.cpp文件。??
  • #?QT4_ADD_RESOURCES就是干這個事情。??
  • SET(?Project_RCCS?YourProject.qrc)??
  • QT4_ADD_RESOURCES(?Project_RCC_SRCS?${Project_RCCS})??
  • ???
  • #-----------------------------------------------??
  • #?根據程序的cpp文件、頭文件以及中間生成的ui_XXXX.h、??
  • #?moc_XXXX.cxx、qrc_XXXX.cxx等生成可執行文件,并鏈接??
  • #?Qt的動態庫(Qt的動態庫都定義在QT_LIBRARIES變量里了)??
  • ADD_EXECUTABLE(?YourProjectName??
  • ????????????????${Project_SRCS}??
  • ????????????????${Project_UIS_H}??
  • ????????????????${Project_MOC_SRCS}??
  • ????????????????${Project_RCC_SRCS}?????????????????????????????
  • ??????????????)??
  • TARGET_LINK_LIBRARIES?(?YourProjectName?${QT_LIBRARIES}?)??
  • 1.2 用CMake來管理Qt與VTK工程

    我們在上面的基礎上添加VTK相關的CMake腳本文件,如下:

    [plain]?view plaincopy
  • #----------------------------------------------------------------------------------??
  • cmake_minimum_required(?VERSION?2.8?)??
  • project(?CombineQtAndVTK?)??
  • ???
  • #----------------------------------------------------------------------------------??
  • find_package(?VTK?REQUIRED?)??
  • find_package(?Qt4?REQUIRED?)??
  • ???
  • include(?${VTK_USE_FILE}?)??
  • include(?${QT_USE_FILE}?)??
  • ???
  • #----------------------------------------------------------------------------------??
  • SET(?PROJECT_SRCS??
  • ????main.cpp??
  • ????ProjectMainWindow.cpp??
  • ????)??
  • ???
  • SET(?PROJECT_UIS??
  • ????ProjectMainWindow.ui??
  • )??
  • ???
  • SET(?PROJECT_MOC_HDRS??
  • ??ProjectMainWindow.h??
  • )??
  • ???
  • #----------------------------------------------------------------------------------??
  • QT4_WRAP_UI(?PROJECT_UIS_H??
  • ?????????????${PROJECT_UIS}??
  • ???????????)??
  • ???
  • QT4_WRAP_CPP(?PROJECT_MOC_SRCS??
  • ??????????????${PROJECT_MOC_HDRS}??
  • ????????????)??
  • ???
  • #----------------------------------------------------------------------------------??
  • INCLUDE_DIRECTORIES(?${PROJECT_SOURCE_DIR}??
  • ?????????????????????${CMAKE_CURRENT_BINARY_DIR}??
  • ?????????????????????${VTK_DIR}??
  • ???????????????????)??
  • ???
  • ADD_EXECUTABLE(?CombineQtAndVTK??
  • ????????????????${PROJECT_SRCS}??
  • ????????????????${PROJECT_UIS_H}??
  • ????????????????${PROJECT_MOC_SRCS}??
  • ??????????????)??
  • ???
  • TARGET_LINK_LIBRARIES?(?CombineQtAndVTK??
  • ??${VTK_LIBRARIES}??
  • ??QVTK??
  • ??)??
  • 以上的腳本除了紅色字體標注的跟1.1注釋的不太像之外,其他的都一樣,不再解釋。

    1.3 CMake腳本里增加工程環境變量的加載

    很多非計算機專業的用戶在使用VTK進行編程時,經常會碰到類似下圖所示的一些錯誤。

    ?

    碰到這樣的錯誤以后,可能很多用戶就不知道怎么處理了,其實上面的提示信息已經寫得非常清楚了,就是缺少“vtkCommon.dll”文件。但是又有人會說:我的電腦里明明有這個文件存在啊,為什么會找不到呢?

    一般的解決方法可能是:

    方法一:將缺少的dll文件全部拷貝的工程的Debug或者Release目錄下(拷貝的時候要注意你編譯的VTK是Debug版本的還是Release版本的,如果拷錯的話,又會出現其他不可預知的錯誤了)。但是這個方法是你每建一個工程,運行工程之前得把缺少的動態庫文件又要拷貝過去,如果你不嫌麻煩的話,可以采用。

    方法二:將缺少的dll文件全部拷貝到Windows系統的目錄下,即C:\Windows\system32或者C:\Windows\system目錄下,這個方法是你拷貝一次,以后再基于你拷貝的VTK動態庫的工程運行的時候問題都解決了。但它同樣有一個問題,假如你電腦里的VTK升級成別的版本,重新編譯了一份動態庫,或者是同時在你電腦里編譯了好幾個版本的VTK,這個時候就有點凌亂了。

    為什么這兩種方法都可以解決問題?原來動態編譯的程序在啟動的時候,會搜索程序所在的目錄以及系統環境變量PATH所列的目錄,如果這些目錄有該程序需要的動態庫時,就加載它們,如果沒有,就提示無法加載相應動態庫的錯誤。

    可以在工程的CMakeLists.txt文件里添加一些腳本,把系統的PATH環境變量作一些更改,在工程啟動之前加載這些環境變量。也就是(在工程的CMakeLists.txt最后添加):

    [plain]?view plaincopy
  • #-----------------------------------------------------------------------------------??
  • #?Construct?a?list?of?paths?containing?runtime?directories?for?project?applications?on?Windows??
  • set(PROJECT_RUNTIME_PATH??"${VTK_LIBRARY_DIRS}/@VS_BUILD_TYPE@;??
  • ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/@VS_BUILD_TYPE@"??
  • ????)??
  • if(QT4_FOUND)??
  • ??set(PROJECT_RUNTIME_PATH?"${PROJECT_RUNTIME_PATH};${QT_LIBRARY_DIR}/../bin")??
  • endif()??
  • ???
  • include(CreateWindowsBatchScript.cmake)??
  • ???
  • #?If?we?are?under?Windows,?create?two?batch?files?which?correctly??
  • #?set?up?the?environment?for?the?application?and?for?Visual?Studio??
  • if(WIN32)??
  • ??set(VS_SOLUTION_FILE?"${PROJECT_BINARY_DIR}/${PROJECT_NAME}.sln")??
  • ??foreach(VS_BUILD_TYPE?debug?release)??
  • ????CreateWindowsBatchScript("${CMAKE_SOURCE_DIR}/StartVS.bat.in"??
  • ??????${PROJECT_BINARY_DIR}/StartVS_${VS_BUILD_TYPE}.bat??
  • ??????${VS_BUILD_TYPE})??
  • ??endforeach()??
  • endif(WIN32)??


  • 以上的腳本也不是特別復雜,但提到了兩個文件:CreateWindowsBatchScript.cmake以及StartVS.bat.in。這兩個文件的內容分別是:

    CreateWindowsBatchScript.cmake:

    ?

    [plain]?view plaincopy
  • function(CreateWindowsBatchScript?in?out?build_type)??
  • ??if(VTK_DIR)??
  • ????set(VTK_BIN_DIR?"${VTK_DIR}/bin/${build_type}")??
  • ??else()??
  • ????set(VTK_BIN_DIR)??
  • ??endif()??
  • ???
  • ??set(VS_BUILD_TYPE?${build_type})??
  • ??configure_file(${in}?${out}?@ONLY)??
  • ??#?substitute?again??
  • ??configure_file(${out}?${out}?@ONLY)??
  • endfunction()??

  • StartVS.bat.in

    ?

    [plain]?view plaincopy
  • @set?CL=/D_CRT_SECURE_NO_DEPRECATE?/D_CRT_NONSTDC_NO_DEPRECATE??
  • @set?LINK=/LARGEADDRESSAWARE??
  • ???
  • PATH=@PROJECT_RUNTIME_PATH@;%PATH%??
  • "@VS_SOLUTION_FILE@"??

  • 將工程通過CMake的configure->generate以后,即可生成StartVS_debug.bat和StartVS_release.bat兩個腳本文件。如果你要編譯、運行Debug版本的工程,即雙擊StartVS_debug.bat文件打開對應的工程,同理,Release版本的也一樣。一旦按這種方式打開相應的工程,就不用再擔心類似“無法加載***.dll文件”的錯誤了。如果你的程序還增加了ITK等函數庫,也可以照著上面的腳本作相應的修改。

    注意:使用時將CreateWindowsBatchScript.cmakeStartVS.bat.in兩個文件與工程的CMakeLists.txt放在同一級目錄里。即類似下圖的目錄結構:

    ?

    2.???用QVTKWidget整合Qt&VTK

    Qt與VTK的整合可以使用VTK提供的類QVTKWidget,看這個類名就知道這個類其實就是一個Qt里的Widget (QVTKWidget派生自QWidget),所以可以把它當作普通的Qt里的Widget來使用,甚至可以在Qt Designer里像Qt的其他標準控件一樣拖來拖去。

    2.1 在Qt Designer里集成

    要實現QVTKWidget在Qt Designer里像Qt的其他標準控件一樣拖來拖去,需要把編譯生成的QVTKWidgetPlugin.dll/QVTKWidgetPlugin.lib(Release版本)復制到Qt的安裝目錄里的plugins\designer目錄下。完了以后,你會在Qt Designer里面看到如下的控件:

    ?

    2.2 讀入一幅圖像,并在Qt界面上顯示

    接下來,我們來完成一個小功能,就是讀入一幅JPG圖像,然后在Qt界面上,用VTK來顯示。功能非常簡單,程序也非常簡單。上代碼:

    ProjectMainWindow.h:

    [cpp]?view plaincopy
  • #ifndef?Project_MainWindow_H??
  • #define?Project_MainWindow_H??
  • ???
  • #include?<QMainWindow>??
  • #include?"ui_ProjectMainWindow.h"??
  • ???
  • #include?<vtkSmartPointer.h>??
  • ???
  • class?vtkImageViewer2;??
  • class?vtkRenderer;??
  • ???
  • ???
  • class?ProjectMainWindow?:?public?QMainWindow,?public?Ui::ProjectMainWindow??
  • {??
  • ???????Q_OBJECT??
  • ???
  • public:??
  • ???????ProjectMainWindow();??
  • ???????~ProjectMainWindow();??
  • ???
  • private?slots:??
  • ???????//響應打開圖像文件的槽函數??
  • ???????void?onOpenSlot();??
  • ???
  • private:??
  • ???????vtkSmartPointer<?vtkImageViewer2?>?m_pImageViewer;??
  • ???????vtkSmartPointer<?vtkRenderer?>?m_pRenderder;??
  • };??
  • ???
  • #endif??

  • ProjectMainWindow.cpp:

    [cpp]?view plaincopy
  • #include?"ProjectMainWindow.h"??
  • ???
  • #include?<QFileDialog>??
  • #include?<QDir>??
  • ???
  • #include?<vtkRenderWindow.h>??
  • #include?<vtkRenderer.h>??
  • #include?<vtkImageViewer2.h>??
  • #include?<QVTKWidget.h>??
  • #include?<vtkJPEGReader.h>??
  • #include?<vtkImageActor.h>??
  • ???
  • ProjectMainWindow::ProjectMainWindow()??
  • {??
  • ???????setupUi(this);??
  • ???
  • ???????m_pImageViewer??=?vtkSmartPointer<?vtkImageViewer2?>::New();??
  • ???????m_pRenderder??????=?vtkSmartPointer<?vtkRenderer?>::New();??
  • ???
  • ???????//?設置m_QVTKWidget的渲染器??
  • ???????m_QVTKWidget->GetRenderWindow()->AddRenderer(m_pRenderder);??
  • ???
  • ???????//連接打開的信號與相應的槽??
  • ???????connect(?m_OpenAction,?SIGNAL(?triggered()?),?this,?SLOT(?onOpenSlot()?)?);??
  • }??
  • ???
  • ProjectMainWindow::~ProjectMainWindow()??
  • {??
  • }??
  • ???
  • void?ProjectMainWindow::onOpenSlot()??
  • {??
  • ???????QString?filter;??
  • ???????filter?=?"JPEG?image?file?(*.jpg?*.jpeg)";??
  • ???
  • ???????QDir?dir;??
  • ???????QString?fileName?=?QFileDialog::getOpenFileName(?this,???
  • ?????????????????????????????????QString(tr("打開圖像")),?dir.absolutePath()?,?filter?);??
  • ???????if?(?fileName.isEmpty()?==?true?)?return;??
  • ???
  • ???????//?支持帶中文路徑的讀取??
  • ???????QByteArray?ba?=?fileName.toLocal8Bit();??
  • ???????const?char?*fileName_str?=?ba.data();??
  • ???
  • ???????//?用vtkJPEGReader讀取JPG圖像??
  • ???????vtkSmartPointer<vtkJPEGReader>?reader?=?vtkSmartPointer<vtkJPEGReader>::New();??
  • ???????reader->SetFileName(fileName_str);??
  • ???
  • ???????//?將reader的輸出作為m_pImageViewer的輸入,并設置m_pImageViewer與渲染器m_pRenderer的關聯??
  • ???????m_pImageViewer->SetInput(reader->GetOutput());??
  • ???????m_pImageViewer->UpdateDisplayExtent();??
  • ???????m_pImageViewer->SetRenderWindow(m_QVTKWidget->GetRenderWindow());??
  • ???????m_pImageViewer->SetRenderer(m_pRenderder);??
  • ???????m_pImageViewer->SetupInteractor(m_QVTKWidget->GetRenderWindow()->GetInteractor());??
  • ???????m_pImageViewer->SetSliceOrientationToXY();?//默認就是這個方向的??
  • ???????m_pImageViewer->GetImageActor()->InterpolateOff();??
  • ???????m_pRenderder->ResetCamera();??
  • ???????m_pRenderder->DrawOn();??
  • ???????m_QVTKWidget->GetRenderWindow()->Render();??
  • }??

  • 程序運行結果:

    ?

    2.3 用vtkEventQtSlotConnect實現VTK事件與Qt槽的連接

    類vtkEventQtSlotConnect可以實現VTK的事件與Qt的槽函數的連接,VTK的事件主要在vtkCommand.h文件里定義,包括鼠標單擊、鼠標雙擊、鼠標移動等等,如:

    vtkCommand::ProgressEvent

    vtkCommand::ErrorEvent

    vtkCommand::WarningEvent

    vtkCommand::PickEvent

    vtkCommand::StartPickEvent

    vtkCommand::EndPickEvent

    vtkCommand::CharEvent

    vtkCommand::KeyPressEvent

    vtkCommand::KeyReleaseEvent

    vtkCommand::LeftButtonPressEvent

    vtkCommand::LeftButtonReleaseEvent

    vtkCommand::MouseMoveEvent

    ……

    具體的代碼實現:

    [cpp]?view plaincopy
  • private?slots:??
  • ???????//響應鼠標移動的消息,實時輸出鼠標的當前位置??
  • ???????void?updateCoords(vtkObject*?obj);??
  • ???
  • private:??
  • ???????vtkEventQtSlotConnect*?m_Connections;??


  • 源文件:

    [cpp]?view plaincopy
  • //構造函數里:??
  • ???????m_Connections?=?vtkEventQtSlotConnect::New();??
  • ???????m_Connections->Connect(m_QVTKWidget->GetRenderWindow()->GetInteractor(),??
  • ??????????????vtkCommand::MouseMoveEvent,??
  • ??????????????this,??
  • ??????????????SLOT(updateCoords(vtkObject*)));??
  • ???
  • //槽函數的實現??
  • void?ProjectMainWindow::updateCoords(vtkObject*?obj)??
  • {??
  • ???????//?獲取交互器??
  • ???????vtkRenderWindowInteractor*?iren?=?vtkRenderWindowInteractor::SafeDownCast(obj);??
  • ???
  • ???????//?獲取鼠標的當前位置??
  • ???????int?event_pos[2];??
  • ???????iren->GetEventPosition(event_pos);??
  • ???
  • ???????QString?str;??
  • ???????str.sprintf("x=%d?:?y=%d",?event_pos[0],?event_pos[1]);??
  • ???????m_StatusBar->showMessage(str);??
  • }??

  • 程序運行結果:

    ?

    示例代碼及該博文文檔下載地址:http://download.csdn.net/detail/www_doling_net/5137375



    (3)二維圖像處理:05-VTK在圖像處理中的應用(4)

    分類:?VTK系列教程?948人閱讀?評論(4)?收藏?舉報 VTK命令模式圖像處理觀察者模式

    目錄(?)[+]

    5.7 區域提取

    5.7.1 提取感興趣區域?

    感興趣區域(Volum of Interest)是指圖像內部的一個子區域。在VTK中vtkExtractVOI類實現由用戶指定的區域范圍提取圖像的子圖像。該Filter的輸入和輸出都是一個vtkImageData,因此其結果可以直接作為圖像保存。

    ?

    ?? 1:????? vtkSmartPointer<vtkBMPReader> reader =

    ?? 2:????????? vtkSmartPointer<vtkBMPReader>::New();

    ?? 3:????? reader->SetFileName ( "lena.bmp" );

    ?? 4:????? reader->Update();

    ? ?5:??

    ?? 6:????? int dims[3];

    ?? 7:????? reader->GetOutput()->GetDimensions(dims);

    ?? 8:??

    ?? 9:????? vtkSmartPointer<vtkExtractVOI> extractVOI =

    ? 10:????????? vtkSmartPointer<vtkExtractVOI>::New();

    ? 11:????? extractVOI->SetInputConnection(reader->GetOutputPort());

    ? 12:????? extractVOI->SetVOI(dims[0]/4.,3.*dims[0]/4.,dims[1]/4.,3.*dims[1]/4., 0, 0);

    ? 13:????? extractVOI->Update();

    ?

    上例代碼實現了提取一副圖像的子區域。首先讀取一個圖像,并獲取圖像的維數。然后定義vtkExtractVOI對象,該對象接收兩個輸入一個是圖像數據,第二個是區域大小。設置區域大小的函數原型:

    void SetVOI(int _arg1, int _arg2, int _arg3, int _arg4, int _arg5, int _arg6)

    void SetVOI(int _arg[])

    其參數是提取的區域各個方向的大小,共6個參數,依次表示x方向最小值,x方向最大值,y方向最小值,y方向最大值,z方向最小值和z方向最大值。上例中由于讀取的是二維圖像,因此z方向的區域為[0,0],而在x方向范圍為[ dims[0]/4 , 3*dims[0]/4 ],y方向范圍為[ dims[1]/4 , 3*dims[1]/4 ],即提取圖像原圖中間1/4圖像。執行結果如下:

    ?

    圖5.18 提取感興趣區域

    5.7.2 三維圖像切片提取

    切片是指三維圖像中的一個切面對應的圖像。切面可以是過圖像內部一點且平行于XY、YZ、XZ平面的平面,也可以是任意的過三維圖像內部一點任意方向的平面。通過提取切片可以方便的瀏覽和分析圖像內部組織結構,是醫學圖像瀏覽軟件中的一個重要的功能。在VTK中vtkImageReslice類實現圖像切片提取功能。下面首先看一段切片提取的代碼。

    1:? vtkSmartPointer<vtkMetaImageReader> reader =

    ?? 2:???? vtkSmartPointer<vtkMetaImageReader>::New();

    ?? 3:? reader->SetFileName ( " brain.mhd" );

    ?? 4:? reader->Update();

    ?? 5:? ?

    ?? 6:? int extent[6];

    ?? 7:? double spacing[3];

    ?? 8:? double origin[3];

    ?? 9:? ?

    ? 10:? reader->GetOutput()->GetExtent(extent);

    ? 11:? reader->GetOutput()->GetSpacing(spacing);

    ? 12:? reader->GetOutput()->GetOrigin(origin);

    ? 13:? ?

    ? 14:? double center[3];

    ? 15:? center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);

    ? 16:? center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);

    ? 17:? center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);

    ? 18:? ?

    ? 19:? static double axialElements[16] = {

    ? 20:???? 1, 0, 0, 0,

    ? 21:???? 0, 1, 0, 0,

    ? 22:???? 0, 0, 1, 0,

    ? 23:???? 0, 0, 0, 1 };

    ? 24:? ?

    ? 25:? vtkSmartPointer<vtkMatrix4x4> resliceAxes =

    ? 26:???? vtkSmartPointer<vtkMatrix4x4>::New();

    ? 27:? resliceAxes->DeepCopy(axialElements);

    ? 28:? ?

    ? 29:? resliceAxes->SetElement(0, 3, center[0]);

    ? 30:? resliceAxes->SetElement(1, 3, center[1]);

    ? 31:? resliceAxes->SetElement(2, 3, center[2]);

    ? 32:? ?

    ? 33:? ?

    ? 34:? vtkSmartPointer<vtkImageReslice> reslice =

    ? 35:???? vtkSmartPointer<vtkImageReslice>::New();

    ? 36:? reslice->SetInputConnection(reader->GetOutputPort());

    ? 37:? reslice->SetOutputDimensionality(2);

    ? 38:? reslice->SetResliceAxes(resliceAxes);

    ? 39:? reslice->SetInterpolationModeToLinear();

    ? 40:? ?

    ? 41:? vtkSmartPointer<vtkLookupTable> colorTable =

    ? 42:???? vtkSmartPointer<vtkLookupTable>::New();

    ? 43:? colorTable->SetRange(0, 1000);

    ? 44:? colorTable->SetValueRange(0.0, 1.0);

    ? 45:? colorTable->SetSaturationRange(0.0, 0.0);

    ? 46:? colorTable->SetRampToLinear();

    ? 47:? colorTable->Build();

    ? 48:? ?

    ? 49:? vtkSmartPointer<vtkImageMapToColors> colorMap =

    ? 50:???? vtkSmartPointer<vtkImageMapToColors>::New();

    ? 51:? colorMap->SetLookupTable(colorTable);

    ? 52:? colorMap->SetInputConnection(reslice->GetOutputPort());

    ? 53:? ?

    ? 54:? vtkSmartPointer<vtkImageActor> imgActor =

    ? 55:???? vtkSmartPointer<vtkImageActor>::New();

    ? 56:? imgActor->SetInput(colorMap->GetOutput());

    ? 57:? ?

    ? 58:? vtkSmartPointer<vtkRenderer> renderer =

    ? 59:???? vtkSmartPointer<vtkRenderer>::New();

    ? 60:? renderer->AddActor(imgActor);

    ? 61:? renderer->SetBackground(.4, .5, .6);

    ? 62:? ?

    ? 63:? vtkSmartPointer<vtkRenderWindow> renderWindow =

    ? 64:???? vtkSmartPointer<vtkRenderWindow>::New();

    ? 65:? renderWindow->SetSize(500, 500);

    ? 66:? renderWindow->AddRenderer(renderer);

    ? 67:? ?

    ? 68:? vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =

    ? 69:???? vtkSmartPointer<vtkRenderWindowInteractor>::New();

    ? 70:? vtkSmartPointer<vtkInteractorStyleImage> imagestyle =

    ? 71:???? vtkSmartPointer<vtkInteractorStyleImage>::New();

    ? 72:? ?

    ? 73:? renderWindowInteractor->SetInteractorStyle(imagestyle);

    ? 74:? renderWindowInteractor->SetRenderWindow(renderWindow);

    ? 75:? renderWindowInteractor->Initialize();

    ? 76:? ?

    ? 77:? renderWindowInteractor->Start();

    ?

    首先通過vtkMetaImageReader讀取一副醫學三維圖像,并獲取得到圖像范圍(extent),原點和像素間隔;由這三個參數可以計算圖像的中心位置center;接下來定義了切面的變換矩陣axialElements,該矩陣的前三列分別表示x、y和z方向向量,第四列為中心點坐標;代碼中的axialElements表示切面變換矩陣與當前坐標系一致,且切面為過中心點center,并平行于XY平面的平面。當前,定義該切面時,也可以是其他平面,甚至是任意平面,但是必須要過圖像內部點。下面給出了一個常用的變換矩陣:

    ?

    static double coronalElements[16] = {

    ?1, 0, 0, 0,

    ?0, 0, 1, 0,

    0,-1, 0, 0,

    ?0, 0, 0, 1 }; 提取平行于XZ平面的切片

    ?

    static double sagittalElements[16] = {

    ?0, 0,-1, 0,

    ?1, 0, 0, 0,

    ?0,-1, 0, 0,

    ?0, 0, 0, 1 }; 提取平行于YZ平面的切片

    ?

    static double obliqueElements[16] = {

    ?1, 0, 0, 0,

    ?0, 0.866025, -0.5, 0,

    ?0, 0.5, 0.866025, 0,

    ?0, 0, 0, 1 }; 提取斜切切片

    ?

    注意使用這些變換矩陣的時候,需要將第四列替換為切片經過圖像的一個點坐標,上例中將圖像的中心添加到axialElements矩陣,并通過函數SetResliceAxes設置變換矩陣,SetOutputDimensionality(2)指定輸出的圖像為一個二維圖像;而函數SetInterpolationModeToLinear()則指定了切面提取中的差值方式為線性差值,另外該類中還提供了其他的差值方式:

    SetInterpolationModeToNearestNeighbor():最近鄰方式

    SetInterpolationModeToCubic():三次線性差值

    設置完畢后,執行Update()即可完成切面計算。運行結果如下圖:

    ?

    圖5.19 切片提取

    5.7.3 擴展

    學習三維圖像切面的提取后,我們在上節的程序上做一個擴展,實現一個稍微復雜的程序——通過滑動鼠標來切換三維圖像切片,這也是醫學圖像處理軟件中一個很基本的功能。實現該功能難點是怎樣在VTK中控制鼠標來實時提取圖像切片。在前面的章節中已經介紹觀察者/命令(Observer/Command)模式,我們也采用這種機制來實現。VTK中鼠標消息是在交互類型對象(interactorstyle)中響應,因此通過為交互類型對象(interactorstyle)添加觀察者(observer)來監聽相應的消息,當消息觸發時,由命令模式執行相應的回調函數。閑話少說,放代碼。

    ??1:? class vtkImageInteractionCallback : public vtkCommand

    ?? 2:? {

    ?? 3:? public:

    ?? 4:? ?

    ?? 5:????? static vtkImageInteractionCallback *New()

    ?? 6:????? {

    ?? 7:????????? return new vtkImageInteractionCallback;

    ?? 8:????? }

    ?? 9:? ?

    ? 10:????? vtkImageInteractionCallback()

    ? 11:????? {

    ? 12:????????? this->Slicing = 0;

    ? 13:????????? this->ImageReslice = 0;

    ? 14:????????? this->Interactor = 0;

    ? 15:????? }

    ? 16:? ?

    ? 17:????? void SetImageReslice(vtkImageReslice *reslice)

    ? 18:????? {

    ? 19:????????? this->ImageReslice = reslice;

    ? 20:????? }

    ? 21:? ?

    ? 22:????? vtkImageReslice *GetImageReslice()

    ? 23:????? {

    ? 24:????????? return this->ImageReslice;

    ? 25:????? }

    ? 26:? ?

    ? 27:????? void SetInteractor(vtkRenderWindowInteractor *interactor)

    ? 28:????? {

    ? 29:????????? this->Interactor = interactor;

    ? 30:????? }

    ? 31:? ?

    ? 32:????? vtkRenderWindowInteractor *GetInteractor()

    ? 33:????? {

    ? 34:????????? return this->Interactor;

    ? 35:????? }

    ? 36:? ?

    ? 37:????? virtual void Execute(vtkObject *, unsigned long event, void *)

    ? 38:????? {

    ? 39:????????? vtkRenderWindowInteractor *interactor = this->GetInteractor();

    ? 40:? ?

    ? 41:????????? int lastPos[2];

    ? 42:????????? interactor->GetLastEventPosition(lastPos);

    ? 43:????????? int currPos[2];

    ? 44:????????? interactor->GetEventPosition(currPos);

    ? 45:? ?

    ? 46:????????? if (event == vtkCommand::LeftButtonPressEvent)

    ? 47:????????? {

    ? 48:????????????? this->Slicing = 1;

    ? 49:????????? }

    ? 50:????????? else if (event == vtkCommand::LeftButtonReleaseEvent)

    ? 51:????????? {

    ? 52:????????????? this->Slicing = 0;

    ? 53:????????? }

    ? 54:????????? else if (event == vtkCommand::MouseMoveEvent)

    ? 55:????????? {

    ? 56:????????????? if (this->Slicing)

    ? 57:????????????? {

    ? 58:????????????????? vtkImageReslice *reslice = this->ImageReslice;

    ? 59:? ?

    ? 60:? ????????????????// Increment slice position by deltaY of mouse

    ? 61:????????????????? int deltaY = lastPos[1] - currPos[1];

    ? 62:? ?

    ? 63:????????????????? reslice->Update();

    ? 64:????????????????? double sliceSpacing = reslice->GetOutput()->GetSpacing()[2];

    ? 65:????????????????? vtkMatrix4x4 *matrix = reslice->GetResliceAxes();

    ? 66:????????????????? // move the center point that we are slicing through

    ? 67:????????????????? double point[4];

    ? 68:????????????????? double center[4];

    ? 69:????????????????? point[0] = 0.0;

    ? 70:????????????????? point[1] = 0.0;

    ? 71:????????????????? point[2] = sliceSpacing * deltaY;

    ? 72:????????????????? point[3] = 1.0;

    ? 73:????????????????? matrix->MultiplyPoint(point, center);

    ? 74:????????????????? matrix->SetElement(0, 3, center[0]);

    ? 75:????????????????? matrix->SetElement(1, 3, center[1]);

    ? 76:????????????????? matrix->SetElement(2, 3, center[2]);

    ? 77:????????????????? interactor->Render();

    ? 78:????????????? }

    ? 79:????????????? else

    ? 80:????????????? {

    ? 81:??? ??????????????vtkInteractorStyle *style = vtkInteractorStyle::SafeDownCast(

    ? 82:????????????????????? interactor->GetInteractorStyle());

    ? 83:????????????????? if (style)

    ? 84:????????????????? {

    ? 85:????????????????????? style->OnMouseMove();

    ? 86:???? ?????????????}

    ? 87:????????????? }

    ? 88:????????? }

    ? 89:????? }

    ? 90:? ?

    ? 91:? private:

    ? 92:????? int Slicing;

    ? 93:????? vtkImageReslice *ImageReslice;

    ? 94:????? vtkRenderWindowInteractor *Interactor;

    ? 95:? };

    ?

    vtkImageInteractionCallback繼承自vtkCommand類,并覆蓋父類函數Execute()。該類提供了兩個接口:SetImageReslice和SetInteractor。SetImageReslice用以設置vtkImageSlice對象,vtkImageSlice根據設置的變換矩陣提取三維圖像切片。SetInteractor用以設置vtkRenderWindowInteractor,vtkRenderWindowInteractor類對象負責每次提取切片后刷新視圖。

    下面我們重點來看一下Execute函數,該函數提供了具體的切片提取功能。在該函數里面,主要監聽了三個消息:

    vtkCommand::LeftButtonPressEvent,

    vtkCommand::LeftButtonReleaseEvent,

    vtkCommand::MouseMoveEvent,

    前兩個消息分別是鼠標左鍵的按下和彈起消息。當鼠標左鍵按下時,就設置切片提取標志為1,而當彈起時,將標志置為0。這樣在鼠標移動時,只有在確定切片提取標志為1時,執行切片提取功能。

    vtkCommand::MouseMoveEvent即為鼠標移動消息。當檢測到該消息時,首先檢查切片提取標志,當為1時提取切片。提取切片時,需要為vtkImageSlice對象設置變換矩陣。這里在函數開始時,首先獲取了鼠標滑動的前后兩次點的位置lastPos和currPos。然后根據兩點的Y坐標差deltaY,計算新的中心點center并變換至vtkImageSlice當前變換矩陣中,得到變換中心點,將其設置到原來的變換矩陣matrix中,并設置到vtkImageSlice中,最后執行interactor->Render()即可不斷的根據鼠標移動刷新圖像。

    Command對象定義完畢后,即可為交互對象InteractorStyle添加觀察者,響應鼠標消息。這里可以在上節的程序上進行修改,前面代碼一致,只需要在最后添加如下代碼:

    1:????? vtkSmartPointer<vtkImageInteractionCallback> callback =

    ?? 2:????????? vtkSmartPointer<vtkImageInteractionCallback>::New();

    ?? 3:????? callback->SetImageReslice(reslice);

    ?? 4:????? callback->SetInteractor(renderWindowInteractor);

    ?? 5:??

    ?? 6:????? imagestyle->AddObserver(vtkCommand::MouseMoveEvent, callback);

    ?? 7:????? imagestyle->AddObserver(vtkCommand::LeftButtonPressEvent, callback);

    ?? 8:????? imagestyle->AddObserver(vtkCommand::LeftButtonReleaseEvent, callback);

    ?? 9:??

    ? 10:????? renderWindowInteractor->Start();

    這里主要是定義了vtkImageInteractionCallback對象,并設置vtkImageSlice對象和vtkRenderWindowInteractor對象。然后為交互對象vtkInteractorStyle添加觀察者來監控相應的消息,這里主要是三個消息:

    vtkCommand::LeftButtonPressEvent,

    vtkCommand::LeftButtonReleaseEvent,

    vtkCommand::MouseMoveEvent,

    當響應到這三個消息時,立即執行vtkImageInteractionCallback的Execute函數,以便實現切片的實時提取和更新。完成以后,運行程序,當鼠標在圖像上移動時,會發現圖像會跟著鼠標的移動而變化,神奇吧?有興趣的話,還可以實現YZ平面、XZ平面切片提取,甚至是任意方向的切面提取。

    ?

    ==========歡迎轉載,轉載時請保留該聲明信息==========

    版權歸@東靈工作室所有,更多信息請訪問東靈工作室




    總結

    以上是生活随笔為你收集整理的VTK教程系列:VTK基础及应用开发教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日本黄色一级电影 | 欧美日韩在线电影 | 色综合亚洲精品激情狠狠 | 在线亚洲人成电影网站色www | 免费看黄电影 | 日日夜夜中文字幕 | 97在线视频免费 | 日本高清中文字幕有码在线 | 久久福利综合 | 色七七亚洲影院 | 国产一区麻豆 | 日韩最新av | 一区二区三区久久精品 | 久久99精品国产99久久 | 成人毛片久久 | 国产精品免费在线播放 | 亚洲精品免费观看视频 | 日韩免费在线视频 | 中文字幕一区二区三区四区视频 | 久久久久国产精品免费 | 国产精品videoxxxx | 在线观看中文字幕av | 狠狠色香婷婷久久亚洲精品 | 四虎4hu永久免费 | av成人在线观看 | 91麻豆精品国产91久久久使用方法 | 国产精品扒开做爽爽的视频 | 青草草在线 | 国产日韩精品一区二区三区 | 免费看一及片 | 国产精品大片在线观看 | 9999在线视频 | 色婷婷激情电影 | 欧美色图p| 在线看中文字幕 | 国产人成看黄久久久久久久久 | 国产黄色片免费在线观看 | 色偷偷88欧美精品久久久 | 久久久精品日本 | 亚洲日本三级 | 一级片黄色片网站 | 久草综合视频 | 久草a视频 | 亚洲精品免费在线播放 | 99r在线视频| 激情网五月 | 99婷婷 | 久草在线免费资源站 | 日本在线视频一区二区三区 | 精品少妇一区二区三区在线 | 97av.com| 精品欧美一区二区在线观看 | 免费av网站观看 | 国产不卡免费视频 | 91成人精品一区在线播放69 | 国产精品久久久久久婷婷天堂 | 国产精品久久电影观看 | 日韩素人在线观看 | 激情av五月婷婷 | 中文字幕成人在线观看 | 久久久久久久久久久久国产精品 | 操操操av | 97视频在线免费观看 | 在线观看成人毛片 | 国产精品99久久久久久久久久久久 | 精品久久久久久久久久久久久久久久久久 | 亚洲色五月 | 91在线蜜桃臀 | 国产高清专区 | 在线视频婷婷 | av片在线观看 | 91男人影院 | 精品国产一区二区三区久久久久久 | 国产亚洲日本 | 亚洲国产精品视频 | 久草资源在线 | 色噜噜狠狠狠狠色综合久不 | 精品国产伦一区二区三区观看体验 | 国产成人一区二区三区在线观看 | 国产香蕉视频在线播放 | 视频直播国产精品 | 综合网中文字幕 | www.亚洲| 日本在线观看一区 | 成人久久久久久久久久 | 婷婷黄色片 | 亚洲精品伦理在线 | 日韩免费高清在线观看 | a亚洲视频 | 在线播放一区二区三区 | 日韩字幕在线 | 亚洲免费色 | 色无五月| 日韩av午夜 | 久久午夜色播影院免费高清 | 亚洲免费激情 | 一本色道久久综合亚洲二区三区 | 日本激情视频中文字幕 | 91大神免费在线观看 | 久久一区91 | 免费a级观看 | 欧美国产日韩一区二区 | 日韩a在线| 亚洲丝袜一区 | 黄色日本免费 | 午夜精品久久久久久久99水蜜桃 | 国产精品视频免费在线观看 | 天天色天天上天天操 | 五月婷婷伊人网 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产一区免费视频 | 五月婷婷激情五月 | 国产黄色精品在线观看 | 国产成人精品一区二区三区网站观看 | 日韩二区三区 | a在线视频v视频 | 亚洲最新毛片 | 国产男女免费完整视频 | 免费看的黄色片 | 黄色avwww | 97人人艹| 波多野结衣日韩 | 国产精品一区二区在线免费观看 | 国产一级片在线播放 | 97色婷婷成人综合在线观看 | 久久福利小视频 | 国产伦精品一区二区三区无广告 | 国内偷拍精品视频 | 91丨九色丨蝌蚪丨老版 | 在线日韩亚洲 | 色婷婷免费视频 | 国产精品破处视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产成人精品网站 | 亚洲综合色婷婷 | 91九色视频网站 | 欧美aaa一级 | 成人av直播 | 国产精品专区在线 | 欧美日韩高清在线观看 | 五月天久久久久 | 日韩欧美视频一区 | 波多野结衣资源 | 在线观看免费黄色 | 最新91在线视频 | 99久国产| 在线激情小视频 | 免费观看一级成人毛片 | 国产精品一区二区果冻传媒 | 青青草久草在线 | 亚洲va男人天堂 | 久久久久久高清 | 91av视频免费在线观看 | 国产原创在线 | 久久影院亚洲 | 天天曰天天爽 | www免费黄色 | 国产女教师精品久久av | 欧美午夜寂寞影院 | 99热在线网站 | 精品日韩中文字幕 | 日韩精品久久久 | 国产精品一二 | 亚洲乱码一区 | 亚洲一区日韩 | 视频成人永久免费视频 | 99国产一区 | 九九热在线免费观看 | 91精品视频在线 | 免费高清在线观看成人 | 久草免费看 | 黄a在线看 | 成人国产综合 | 欧美日韩视频一区二区三区 | 成人性生交大片免费观看网站 | 免费观看的av网站 | 91在线你懂的 | 日本特黄特色aaa大片免费 | 国产女v资源在线观看 | 国产精品久久久久四虎 | 在线国产日韩 | 美女福利视频在线 | 久久综合射 | 亚洲区另类春色综合小说 | 丰满少妇在线观看网站 | 天天做天天爱夜夜爽 | 91成人观看 | 日日夜夜天天操 | 日韩免费福利 | 日韩精品一区二区三区第95 | 日韩中文字幕免费在线播放 | 国产精品第7页 | 国产中文字幕一区二区三区 | 在线观看国产成人av片 | 免费特级黄毛片 | 久草综合视频 | 精品久久久国产 | 狠狠干狠狠久久 | 日韩久久久久久久久久 | 在线看片成人 | 精品国产1区 | 天天添夜夜操 | 国产精品美女www爽爽爽视频 | 成人97人人超碰人人99 | 999久久久久久久久6666 | 伊人六月 | 午夜电影久久久 | 九九九热精品免费视频观看网站 | 射射色 | 国产在线精品播放 | 99视频免费在线观看 | a黄色一级 | av成人亚洲 | 午夜精品一区二区三区在线观看 | 97精品国自产拍在线观看 | 日韩一区二区三区高清在线观看 | 久久久鲁 | 九九热有精品 | 美女国产在线 | 欧美91成人网 | 久久dvd | 一区二区不卡 | 久久国产午夜精品理论片最新版本 | www免费看片com | 在线中文字幕观看 | 国产黄免费看 | 久久久国产精品亚洲一区 | 日本公乱妇视频 | 伊人天堂av | 精品亚洲视频在线 | 国产亚洲成人精品 | 久久黄色免费视频 | 天天夜夜亚洲 | 久草视频看看 | 在线 你懂| 中文字幕成人在线观看 | 亚洲精品视频 | 日韩精品视频网站 | 亚洲免费婷婷 | 日韩欧美一区二区在线播放 | 亚洲精品在线免费观看视频 | 欧美成人日韩 | 久久久久免费精品国产小说色大师 | 日本字幕网 | 天天操夜夜操夜夜操 | 国产在线视频不卡 | av一级片在线观看 | 亚洲欧美国产精品va在线观看 | 亚洲视频国产 | 欧美性受极品xxxx喷水 | 国产精品av久久久久久无 | 97在线观看免费观看高清 | 99精品免费久久久久久久久 | 亚洲第一av在线播放 | av爱干| 在线看小早川怜子av | 国产精品麻豆91 | 午夜.dj高清免费观看视频 | jizz欧美性9 国产一区高清在线观看 | 欧美久久影院 | 久久国产精品99久久人人澡 | 欧美日韩中 | 亚洲精品国产精品乱码在线观看 | 亚洲国产97在线精品一区 | 久久久久久高潮国产精品视 | 久草网站在线 | 亚洲最大在线视频 | 久久综合狠狠综合久久激情 | 免费a v在线 | 成人网444ppp| 亚洲一区二区精品在线 | 韩日电影在线免费看 | 婷婷丁香激情综合 | 一区二区三区在线影院 | 操操操av | 黄色一级在线视频 | 欧美精品亚洲二区 | 亚洲 中文字幕av | 亚洲天堂免费视频 | 国产短视频在线播放 | 九九精品久久 | 国产99久久久国产精品成人免费 | 欧美乱大交 | av电影在线播放 | 久久国产精品久久久久 | 粉嫩高清一区二区三区 | 国产69精品久久久久久久久久 | av在线播放一区二区三区 | 久久欧美视频 | 91视频免费国产 | 91九色精品女同系列 | 欧美国产日韩一区二区三区 | free. 性欧美.com | 欧美日韩另类在线 | 三级在线视频观看 | 国产天天爽 | 欧美精品三级 | 国产免费人成xvideos视频 | 日韩中文字幕视频在线观看 | 欧美日韩三区二区 | 视频在线一区二区三区 | 国产美女网 | 免费视频在线观看网站 | 中文字幕日韩精品有码视频 | 国产精品久久久亚洲 | 在线观看岛国av | 中文字幕在线国产精品 | 97夜夜澡人人双人人人喊 | 午夜久操 | 黄色在线观看www | 国产一线在线 | 久久久精品视频成人 | 在线黄频 | 国产在线更新 | 久艹在线播放 | 正在播放国产91 | 欧美黄网站 | 韩国av不卡 | 69国产精品成人在线播放 | 国产精品免费av | 精品国产一区二区三区男人吃奶 | 久草在线最新 | 97av免费视频 | 国产成人精品一区二区三区在线 | 999在线精品 | 人人爽人人澡人人添人人人人 | 日韩中文字幕视频在线 | 国产露脸91国语对白 | 爱色av.com | 色婷婷综合视频在线观看 | 久久激五月天综合精品 | 国产视频在线观看一区 | av色一区| 日韩在线高清视频 | 免费日p视频 | 久久精品成人欧美大片古装 | 国产精品麻豆视频 | 日韩精品在线视频免费观看 | 日日夜夜人人精品 | 日韩免费成人 | 久久精品国产亚洲精品2020 | 欧美日韩在线视频观看 | 一区二区三区高清 | 天天插日日插 | 亚洲精品视频一二三 | 人人搞人人搞 | 亚洲精品在线免费看 | 久久不射影院 | 国产中文字幕一区 | 免费黄色av电影 | 一级黄色视屏 | 开心激情综合网 | 精品在线二区 | 91精品福利在线 | 91免费观看| 国产91精品在线观看 | 激情伊人五月天久久综合 | 成人一级免费电影 | 国内小视频在线观看 | 精品亚洲成人 | 美女久久久| 日本韩国精品一区二区在线观看 | 91看片淫黄大片一级在线观看 | 久久精品综合 | 日本中出在线观看 | 久久国产精品网站 | 91久久国产自产拍夜夜嗨 | 伊人丁香 | 国产精品久久久久久久久大全 | 日韩欧美国产精品 | 一区二区精品在线 | 天天干天天在线 | 国产高清视频 | 久久精品爱爱视频 | 国产色视频一区二区三区qq号 | 午夜影院一级片 | 国产视频久久久久 | 色噜噜在线观看视频 | 天天躁天天躁天天躁婷 | 在线观看不卡视频 | 丁香六月在线观看 | 亚洲全部视频 | 午夜av一区二区三区 | 国产国产人免费人成免费视频 | 亚洲综合五月天 | 草久在线| 久久精品导航 | 中文字幕在线有码 | 黄污网 | 国产爽妇网 | 久久免费看视频 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产精品av在线 | 国产超碰在线观看 | 国产成人精品一二三区 | 亚洲一区二区三区四区在线视频 | www.亚洲精品 | 国产理论在线 | 久久男人视频 | 国产精品日韩久久久久 | 西西444www大胆高清视频 | 亚洲综合激情网 | 欧美精品中文字幕亚洲专区 | 亚洲欧洲日韩在线观看 | 久久中国精品 | 久草在线观看 | 日韩欧美一区二区三区黑寡妇 | 99热这里只有精品8 久久综合毛片 | 2024av在线播放| 国产精品欧美日韩在线观看 | 97国产大学生情侣白嫩酒店 | 91视频免费网址 | 久久与婷婷 | 欧美日韩亚洲第一页 | 区一区二区三区中文字幕 | 久久久久久久久久久影院 | 国产精品久久久久久99 | 亚洲视频大全 | 狠狠狠狠狠狠狠狠干 | 新av在线 | 亚洲成人午夜av | 69精品人人人人 | 91视频久久久 | av成人亚洲 | 亚洲成人精品国产 | 国产又黄又硬又爽 | 久久97久久| 亚洲精品午夜久久久久久久久久久 | 六月丁香激情网 | 久久精品美女 | 久久精品2 | 丁香六月av | 亚洲h视频在线 | 亚洲精品毛片一级91精品 | 亚洲成人网av | 成人国产一区二区 | 欧美日韩国产网站 | 久久免费99 | 91精品久久久久久久99蜜桃 | 在线免费高清 | 久久免费高清视频 | 色婷婷狠狠五月综合天色拍 | 天天天天天天操 | 人人爽人人插 | 国产黄色在线观看 | 日韩一级成人av | 在线视频观看国产 | av一级在线观看 | 亚洲在线资源 | 99999精品 | 成年人免费看片 | 免费无遮挡动漫网站 | 亚洲免费av片 | 中文字幕视频一区二区 | 日韩免费在线观看视频 | 缴情综合网五月天 | 韩国av在线 | 美女在线国产 | 亚洲精品福利在线观看 | 亚洲一级特黄 | 国产专区第一页 | 久久午夜免费视频 | www一起操| 精品国产区在线 | www.色国产 | 中文字幕观看av | 天天操天天射天天爱 | 久久免费看a级毛毛片 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产视频日韩视频欧美视频 | 在线成人一区二区 | 9999亚洲 | 国产精品资源网 | 日日久视频 | 国产精品va在线观看入 | 最近中文字幕第一页 | 91视频在线免费下载 | 狠狠狠狠狠狠操 | 国产剧在线观看片 | av中文字幕日韩 | 久久久精品国产一区二区电影四季 | 久久久久久美女 | 日本在线观看中文字幕无线观看 | av黄色大片 | 成人一级在线 | 久久草视频 | 美女网站黄免费 | 日本中文字幕在线视频 | 日日爱视频 | 中文字幕大全 | 人人爽人人香蕉 | 在线视频观看你懂的 | 日韩色中色 | 狠狠色噜噜狠狠 | 在线观看www.| 三级黄色网址 | 高清精品久久 | 国产在线p | 日韩欧美国产激情在线播放 | 久久精品人人做人人综合老师 | 国产精品一区二区62 | 精品一区二区影视 | 97在线影院 | 国产亚洲精品久久久久久网站 | 亚洲国产精久久久久久久 | 亚洲国产理论片 | 在线亚洲免费视频 | 97视频在线观看播放 | 日日爽日日操 | 91九色视频| 超碰免费av | 精品久久久久一区二区国产 | 日日夜夜精品网站 | 黄污视频大全 | 99久久99视频只有精品 | 成人一区在线观看 | 日本三级香港三级人妇99 | 亚洲国产午夜精品 | 亚洲成人资源在线观看 | a色网站| 久久99精品国产麻豆宅宅 | 91九色丨porny丨丰满6 | 久久久久久久久久伊人 | 992tv又爽又黄的免费视频 | 狠狠狠狠狠操 | 高清不卡毛片 | 一级黄毛片 | 亚洲精品高清一区二区三区四区 | 中文在线字幕免 | 在线观看视频黄色 | 波多野结衣在线观看视频 | 久久99精品国产99久久 | 国内精品视频免费 | 日韩av视屏 | 日韩免费观看视频 | 国产99一区视频免费 | 久插视频 | 国产成人精品午夜在线播放 | 久久久久久久久久久久影院 | 成人av在线看 | 在线观看日本韩国电影 | 久久免费国产精品1 | 国产精品久久久久久影院 | 色综合天天在线 | 久久久久国产a免费观看rela | 日韩精品在线一区 | 欧美性色黄大片在线观看 | 蜜臀一区二区三区精品免费视频 | 99热国产精品| 男女靠逼app | 欧洲av不卡 | 天天操天天吃 | 久久久www成人免费精品张筱雨 | 91网址在线 | 国产免费成人 | 韩日精品在线 | 国模视频一区二区三区 | 亚洲欧洲日韩 | caobi视频| 午夜的福利 | 日韩av网址在线 | 久久综合国产伦精品免费 | 国产亚洲免费的视频看 | 国产精品成人品 | 在线国产一区二区三区 | 欧美小视频在线观看 | 国产精品久久一区二区无卡 | 激情五月看片 | 在线探花| 亚洲伊人天堂 | 国产午夜三级一区二区三 | 国产亚洲精品综合一区91 | 狠狠色综合欧美激情 | 91资源在线视频 | 午夜视频在线瓜伦 | 青春草免费视频 | 天天操天天色天天射 | 婷婷激情站 | 在线观看日本高清mv视频 | 国产精品18久久久久久久久 | 久久av网址 | 夜夜操网 | 麻豆视频www| 免费看一级特黄a大片 | 黄色小网站在线 | 色婷婷色 | 丁香婷婷综合五月 | 91成人在线看 | 欧美在线视频免费 | 日韩在线观看一区二区三区 | 久久av影视 | 国产精品99精品 | 最新91在线视频 | 97精产国品一二三产区在线 | 夜夜躁天天躁很躁波 | 欧美日韩中字 | 欧美日本三级 | 成人免费看视频 | 国产在线国偷精品产拍免费yy | 国产精品剧情在线亚洲 | 免费国产在线精品 | 97人人艹 | 超碰在线人人艹 | 成片人卡1卡2卡3手机免费看 | 久久a免费视频 | 欧美污污视频 | 久久久久久国产精品久久 | 中文字幕第一页在线 | 99r在线观看 | 色a4yy| 去看片 | www.激情五月.com | 精品国产中文字幕 | 欧美成人一区二区 | 婷婷五月在线视频 | 91丨九色丨蝌蚪丰满 | 精品在线视频一区 | 免费在线观看av网址 | 99精品在这里 | 久久任你操 | 玖草在线观看 | 99视频免费| 午夜av激情 | 国产一级视频在线观看 | 特级西西www44高清大胆图片 | 日韩在线免费观看视频 | 丝袜网站在线观看 | 精品国产一区二区三区久久久久久 | 免费在线观看一区二区三区 | 一区二区影院 | 俺要去色综合狠狠 | 天天插综合网 | 九九在线国产视频 | a视频在线看 | 成人在线观看资源 | 97天堂| 国产91精品久久久久久 | 综合天天色 | 日韩在线视频不卡 | 国产亚洲婷婷 | 日韩精品久久中文字幕 | 欧美成人在线网站 | 不卡精品视频 | 亚洲精品一区二区三区四区高清 | 青青河边草免费观看完整版高清 | 日韩精品一区在线观看 | 国产亚洲欧美日韩高清 | 久久亚洲视频 | 成人一级黄色片 | 国产精品s色 | 啪啪免费观看网站 | 日韩欧美在线观看一区二区 | 国产精品99精品久久免费 | 在线亚洲欧美日韩 | 精品久久99| 高清日韩一区二区 | 五月天综合激情网 | 国产精品久久久久亚洲影视 | 国产探花 | 国产一区二区中文字幕 | 婷婷六月丁香激情 | 午夜av免费看 | 又黄又爽的视频在线观看网站 | 亚洲精品资源 | 国精产品999国精产品视频 | av中文天堂 | 九九热免费精品视频 | 天干啦夜天干天干在线线 | 视频一区二区视频 | 中文字幕4| 亚洲精品自拍 | 四虎在线观看精品视频 | 热久久精品在线 | 又污又黄网站 | 91在线视频导航 | 在线观看免费版高清版 | 天天插视频 | 精品国模一区二区三区 | 欧美少妇bbwhd | 2024国产精品视频 | 日韩欧美精品在线视频 | 婷婷免费视频 | 香蕉视频网站在线观看 | 三级黄色片子 | 999国产精品视频 | 在线播放 日韩专区 | 天天综合网国产 | 国产高清在线不卡 | 久久精品视频在线看 | www.夜夜爱| 日韩国产欧美在线播放 | 久久久精品久久 | 日韩夜夜爽 | 最近中文字幕完整高清 | 中文字幕在线观看亚洲 | 日本免费一二三区 | 高清中文字幕 | 69精品视频 | 成人免费大片黄在线播放 | 国产一级h| 超碰精品在线观看 | 国产一区二区影院 | 国产在线a免费观看 | 视频在线亚洲 | 精品一区二三区 | 亚洲va在线va天堂va偷拍 | 高清不卡免费视频 | 成年免费在线视频 | 亚洲精品国产成人av在线 | 久久久国产精品免费 | 91桃花视频 | 91视频久久久 | www.亚洲视频| 精品一区二区三区香蕉蜜桃 | 超碰在线公开免费 | 亚洲精品成人av在线 | www.夜夜草| 免费a一级 | bbbbb女女女女女bbbbb国产 | 午夜精品一区二区三区可下载 | 波多野结衣视频一区 | 国产精品日韩高清 | 激情一区二区三区欧美 | 狠狠狠狠狠干 | 亚洲精品大全 | 国产三级午夜理伦三级 | 免费视频一二三区 | 国产精品18久久久久久久久 | 国产探花视频在线播放 | 亚洲精品视频在 | 中文字幕一区二区三区视频 | 婷婷在线免费视频 | 国产一级片免费播放 | 欧美另类69| 91精品国产乱码久久 | 国产不卡精品 | 中文国产字幕在线观看 | 免费91麻豆精品国产自产在线观看 | 亚洲成色777777在线观看影院 | 国产精品免费高清 | 天天操天天艹 | 人人舔人人舔 | 免费男女羞羞的视频网站中文字幕 | 久久视频二区 | 久操视频在线播放 | 四虎8848免费高清在线观看 | 久章草在线观看 | 国产精品成人自产拍在线观看 | 免费国产在线精品 | 久久av免费观看 | 看片网站黄 | 日本三级不卡视频 | 亚洲成色777777在线观看影院 | av电影在线播放 | 激情久久久久 | 国产专区在线播放 | 91九色蝌蚪国产 | 超碰国产人人 | 少妇搡bbbb搡bbb搡忠贞 | 91在线看视频免费 | 国产精品精品视频 | 2022中文字幕在线观看 | 免费h精品视频在线播放 | 久久久精品国产一区二区电影四季 | av在线播放亚洲 | 国产精品99久久久 | 亚洲视频资源在线 | 欧洲一区二区三区精品 | 日日夜夜天天综合 | 国产视频导航 | 日韩动漫免费观看高清完整版在线观看 | 最新国产精品拍自在线播放 | 免费看的黄色录像 | 欧美在线视频一区二区 | 黄色一级在线免费观看 | 久久久久免费观看 | 91福利国产在线观看 | 欧美日韩免费一区二区三区 | 97精品国产一二三产区 | 欧美成人视 | 欧美成亚洲 | 在线观看日韩国产 | 干干日日 | 狠狠狠狠干 | 国产特级毛片aaaaaa毛片 | 日韩视频在线播放 | 成人福利av| 日韩av女优视频 | 久久综合影视 | 成人久久久久久久久久 | 五月天丁香综合 | 国产视频久久久 | 国产三级精品三级在线观看 | 亚洲人xxx| 日韩在线视 | 丁香六月久久综合狠狠色 | 在线免费观看涩涩 | 久久成年人 | 色福利网站 | 狠狠色噜噜狠狠 | 精品国产91亚洲一区二区三区www | 日本一区二区三区免费看 | 色综合久久88 | 亚洲 欧美 精品 | 激情欧美一区二区三区免费看 | 免费视频97 | 免费成人在线观看 | 97超碰人人澡人人 | 99久久精品免费看 | 日韩在线理论 | 欧美一级片免费播放 | 成人黄色大片在线免费观看 | 欧美日韩一区二区三区在线免费观看 | 最近免费在线观看 | 日韩丝袜视频 | 全黄色一级片 | 1024手机基地在线观看 | 婷婷亚洲综合五月天小说 | 最近免费中文字幕 | 91精品1区 | 国产不卡在线 | 国产精品美女久久久久久久网站 | 国产小视频精品 | 天天爱天天 | 久久精品一二三区白丝高潮 | 日韩视频一区二区在线 | 国产在线精品区 | 国产一区在线看 | 日韩高清精品免费观看 | 91福利区一区二区三区 | 久久色在线观看 | 成人aⅴ视频 | 天天色天天操综合网 | 成人av播放 | 国产成人精品aaa | 奇米777777 | 国产中年夫妇高潮精品视频 | av福利网址导航 | 99久久99久国产黄毛片 | av成人免费在线 | 精品在线观看一区二区三区 | www.在线观看视频 | 欧美最新大片在线看 | 久久国产精品精品国产色婷婷 | 亚洲成人免费观看 | 99久久综合狠狠综合久久 | 成人免费精品 | 欧美一区二区日韩一区二区 | 激情视频免费观看 | 精品日韩在线 | 综合在线观看 | 国产精品麻豆99久久久久久 | 久久一视频 | 深爱婷婷久久综合 | 中文字幕免费在线看 | 色视频在线观看免费 | 欧美日韩在线视频一区 | 国产精品嫩草69影院 | www.黄色网.com | 国产黄大片 | 国产精品女同一区二区三区久久夜 | 欧美性黑人 | 91av视频免费在线观看 | 国产亚洲视频在线 | 岛国av在线 | 国内精品久久久久久久影视简单 | 99久久精品午夜一区二区小说 | 亚洲日本激情 | 成人毛片一区二区三区 | 日韩免费电影一区二区 | 精品999久久久 | 中文字幕免费一区 | 久草在线一免费新视频 | 久久亚洲免费 | 午夜婷婷在线观看 | 婷婷色在线播放 | 最新色视频| 91精品推荐| 国产午夜一区二区 | 五月天久久婷 | 99久久婷婷国产综合亚洲 | 色999视频| 91网址在线观看 | 亚洲日本在线视频观看 | 九九热免费在线视频 | 欧美成人视 | 久久看片网站 | 国产不卡一二三区 | 婷婷亚洲五月 | 黄色在线观看污 | 久久久久伊人 | 午夜精品福利一区二区三区蜜桃 | 国产精品mv| 一级a性色生活片久久毛片波多野 | 欧美va天堂va视频va在线 | 国产网红在线观看 | 亚洲黄色成人 | 天天射成人 | 一区 在线 影院 | 亚洲资源网 | 国产视频久 | 精品国模一区二区 | 毛片99| 亚洲情婷婷 | 国产专区在线看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产一区在线免费观看视频 | 精品久久一二三区 | 精品嫩模福利一区二区蜜臀 | 成人黄在线| 久久人人艹| 美女视频国产 | 国产综合福利在线 | 麻豆视频91| 97在线播放| 国产成人一区在线 | 亚洲精品国偷拍自产在线观看 | a国产精品| 国产日韩视频在线观看 | 久久一区二区三区超碰国产精品 | 久久免费视频8 | 日韩色在线| 国产永久免费高清在线观看视频 | 超碰午夜 | 国产精品av电影 | 国产成人免费av电影 | 久久xx视频 | 色综合久久久久综合99 | 亚洲欧美成人综合 | 国产精品在线看 | 久久午夜视频 | 人人澡超碰碰97碰碰碰软件 | 91完整视频 | 精品视频9999| 日韩网站一区 | 日本少妇久久久 | 国内小视频 | 在线观看视频国产 | 西西4444www大胆艺术 | 一区二区三区日韩视频在线观看 | 久久一久久 | 国产99久久久国产 | 国产精彩视频 | 精品久久久久久久久久国产 | 国语麻豆 | 草久在线播放 | 亚洲免费公开视频 | 九九视频在线观看视频6 | 国产日韩高清在线 | 激情五月婷婷综合 | 久久一区二区三区国产精品 | 天天射射天天 | 美女网站在线播放 | 久久精品福利视频 | 欧美色图亚洲图片 | 狠狠色狠狠色终合网 | 国产精品久久嫩一区二区免费 | 天天干天天射天天爽 | 日韩高清免费无专码区 | 国产免费视频一区二区裸体 | a级免费观看 | 国产黄色片久久久 | 一级黄色免费 | 久久久国产精品麻豆 | 久久国产一区二区 | 人人玩人人爽 | 五月婷婷香蕉 | 欧美日韩激情网 | 亚洲精品乱码久久久久久 | 亚州精品天堂中文字幕 | 在线观看黄色小视频 | 精品久久久久久久久久国产 | 国产视频观看 | 人人爽人人av| 国产精品综合久久久久 | 依人成人综合网 | 99爱爱| 91视频最新网址 | 国产高清免费在线播放 | 成人九九视频 | 激情综合色图 | 99一级片| 亚洲精选久久 | 成人性生爱a∨ | 精品成人国产 | 成人网大片| 精品自拍av | 久久精品人人做人人综合老师 | 黄色成人av | 99精品免费久久久久久日本 | 日韩高清在线观看 | 色中文字幕在线观看 | 五月天久久久久久 | 欧美在线观看视频一区二区 | 91福利区一区二区三区 | 日韩在线观看av | 美女网站视频免费都是黄 | 成人免费一级 |