免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

醫(yī)療數(shù)字閱片實(shí)戰(zhàn):從OHIF-Viewers到Cornerstone.js渲染鏈路拆解

醫(yī)療數(shù)字閱片實(shí)戰(zhàn):從OHIF-Viewers到Cornerstone.js渲染鏈路拆解 醫(yī)療數(shù)字閱片實(shí)戰(zhàn)從 OHIF-Viewers 到 Cornerstone.js 渲染鏈路拆解前陣子項(xiàng)目組接到一個(gè)任務(wù)要把傳統(tǒng)的膠片閱片流程搬進(jìn)瀏覽器做一套輕量級(jí)的數(shù)字閱片工具。技術(shù)選型階段我們幾乎沒怎么猶豫就鎖定了 OHIF-Viewers 這套開源框架因?yàn)樗牡讓愉秩疽蕾嚨氖?Cornerstone.js——準(zhǔn)確說是 cornerstone-core 這個(gè)核心庫。這套組合在醫(yī)學(xué)影像前端領(lǐng)域算得上是事實(shí)標(biāo)準(zhǔn)了Viewers 負(fù)責(zé)界面編排和業(yè)務(wù)邏輯Cornerstone.js 專門干渲染這檔子事。今天就從我實(shí)際動(dòng)手折騰的視角把這套東西從架構(gòu)拆解到具體實(shí)例整個(gè)聊一遍尤其重點(diǎn)說說 cornerstone-core 的渲染管線是怎么一回事以及怎么通過 Cornerstone Examples 快速跑通一個(gè)能用的閱片 demo。這篇內(nèi)容適合誰看如果你是打算做醫(yī)學(xué)影像 Web 端項(xiàng)目的開發(fā)者或者想在 OHIF-Viewers 基礎(chǔ)上做二次開發(fā)又或者純粹是想搞明白 Cornerstone.js 這套渲染庫到底怎么運(yùn)作那這篇應(yīng)該能幫你省下不少摸索的時(shí)間??赐昴阒辽倌芨闱宄讉€(gè)最要命的問題imageId 是什么、加載器怎么注冊(cè)、為什么一個(gè) DICOM 文件要轉(zhuǎn)成 ImageData 才能上屏以及怎樣用最小代價(jià)寫一個(gè)能用的 Cornerstone 自定義應(yīng)用。先說結(jié)論Cornerstone.js 這套架構(gòu)的核心思想就八個(gè)字——職責(zé)單一插拔加載。它把影像解碼、傳輸、渲染、交互全部拆開各自做成獨(dú)立模塊再通過一套約定好的接口把它們串起來。理解了這個(gè)后面所有代碼都好辦了。1. 先從 OHIF-Viewers 說起它到底解決了什么問題1.1 為什么不是自己擼一個(gè)影像查看器你要真去啃一遍 DICOM 標(biāo)準(zhǔn)會(huì)發(fā)現(xiàn)那是一個(gè)能把人活活看吐的龐然大物。光是文件頭里那幾百個(gè) tag什么患者姓名、檢查號(hào)、序列號(hào)、窗寬窗位、像素間距、Modality、SOP Instance UID……真要自己從零開始解析再把灰度圖像映射到 Canvas 上沒有一兩個(gè)月拿不下來而且做出來大概率是漏洞百出。這里我不打算展開 DICOM 標(biāo)準(zhǔn)的細(xì)節(jié)但要記住一個(gè)關(guān)鍵點(diǎn)醫(yī)學(xué)影像不是普通圖片它包含大量 meta 信息而且像素?cái)?shù)據(jù)往往不是直接可以顯示的灰度值需要做 modality transform模態(tài)轉(zhuǎn)換和 VOI transform窗寬窗位變換才能真正在屏幕上展示出來。OHIF-Viewers 做的事情就是把這一整套復(fù)雜流程封裝成現(xiàn)成的頁面級(jí)應(yīng)用。它提供了一系列 viewer 頁面組件比如 CornerstoneViewport 用于顯示圖像測(cè)量工具、標(biāo)注工具、播放器、序列瀏覽等一應(yīng)俱全。你拿來改一改接入自己后端的 PACS 服務(wù)或者本地 DICOM 文件一個(gè)能用的影像閱片系統(tǒng)就立起來了。1.2 OHIF 與 Cornerstone 的分工邏輯OHIF-Viewers 不是從頭到尾自己包辦它對(duì)底層渲染庫做了抽象??此囊蕾囮P(guān)系就能發(fā)現(xiàn)真正干活的是 cornerstone.js 系列的三個(gè)包c(diǎn)ornerstone-core是核心渲染引擎cornerstone-tools提供交互工具和測(cè)量注釋功能cornerstone-wado-image-loader負(fù)責(zé)解碼和加載 DICOM 圖像。此外還有 cornerstone-math 做幾何計(jì)算支撐。OHIF 就像是坐在這些基石上面的總調(diào)度它管理數(shù)據(jù)集、元數(shù)據(jù)、工作流而真正把 DICOM 像素變成屏幕上的影像的是 cornerstone-core 在做。這個(gè)分工邏輯其實(shí)很好理解。打比方說OHIF 像是一家餐廳的前廳和后廚管理負(fù)責(zé)點(diǎn)單、傳菜、按照顧客需求配餐而 Cornerstone.js 是灶臺(tái)和廚師負(fù)責(zé)把食材加工成能上桌的菜。后廚只管烹飪不管顧客是誰、賬單怎么結(jié)所以 Cornerstone.js 本身非常純粹——它不關(guān)心你從哪兒拿到圖像數(shù)據(jù)只負(fù)責(zé)把拿到的圖像數(shù)據(jù)渲染到 canvas 上。2. Cornerstone.js 實(shí)例拆解基石庫的工作原理2.1 cornerstone-core 的幾個(gè)核心概念要玩轉(zhuǎn) Cornerstone.js有四個(gè)坎必須得邁過去imageId、Image Loader、Image 對(duì)象、渲染循環(huán)。這四個(gè)概念環(huán)環(huán)相扣是 Cornerstone.js 實(shí)例中反復(fù)出現(xiàn)的核心要素。先講 imageId。你可能會(huì)想我直接傳一個(gè) DICOM 文件路徑給它不就行了不行。Cornerstone.js 采用的是 URL 約定機(jī)制每個(gè)可被加載的圖像資源都必須有一個(gè)全局唯一的 imageId格式通常是這樣的dicomweb://www.example.com/studies/1/series/2/instances/3或者wadouri://path/to/file.dcm也可以是自定義協(xié)議如my-loader://some-id。imageId 的作用有兩個(gè)第一作為加載器的調(diào)度憑據(jù)Cornerstone 看到 imageId 就會(huì)找到對(duì)應(yīng)注冊(cè)的 loader第二作為圖像的緩存鍵渲染后圖像會(huì)被緩存起來下次再訪問同一個(gè) imageId 就直接命中緩存不用重新解碼。然后是 Image Loader圖像加載器。Cornerstone-core 本身不內(nèi)置任何加載器它只定義了一套接口約定。加載器負(fù)責(zé)接收 imageId去網(wǎng)絡(luò)、本地文件系統(tǒng)或內(nèi)存中取數(shù)據(jù)解析圖像最終返回一個(gè) Image 對(duì)象。常用的 cornerstone-wado-image-loader 就是加載器的具體實(shí)現(xiàn)它內(nèi)部使用 dcmjs 解析 DICOM用 web worker 做像素?cái)?shù)據(jù)的解碼解碼完以后封裝成 cornerstone 需要的 Image 對(duì)象上拋。Image 對(duì)象是 cornerstone 渲染的最小單元。它長(zhǎng)什么樣簡(jiǎn)單來說就是一個(gè)普通 JS 對(duì)象里面包含 width、height、minPixelValue、maxPixelValue、slope、intercept、windowCenter、windowWidth 等屬性還有一個(gè)最關(guān)鍵的方法 getPixelData()返回一個(gè) unpacked 的像素?cái)?shù)組。Cornerstone 只認(rèn)這個(gè)結(jié)構(gòu)只要你的加載器能產(chǎn)出合法的 Image 對(duì)象它就能渲染不管你背后是 DICOM、JPEG、PNG 還是直接從內(nèi)存拿的像素?cái)?shù)據(jù)。渲染循環(huán)則是 cornerstone 內(nèi)部干的活它拿到 Image 對(duì)象根據(jù)當(dāng)前 viewport 的窗寬窗位、縮放比例、插值算法等參數(shù)把像素?cái)?shù)據(jù)映射到 canvas 的顯存上最終呈現(xiàn)出來。這個(gè)映射過程涉及醫(yī)學(xué)影像顯示中非常重要的VOI LUT像素值到灰度值的映射表適配和modality LUT模態(tài)變換處理后面細(xì)說。2.2 從 DICOM 文件到屏幕上圖像數(shù)據(jù)流的走向我在本地寫了一個(gè)最小實(shí)例來驗(yàn)證完整的數(shù)據(jù)流你也可以照著跑一遍。假設(shè)你有一個(gè)本地的 DICOM 文件名字叫example.dcm放在服務(wù)器 static 目錄下。那么頁面里創(chuàng)建一個(gè) canvas 元素調(diào)用cornerstone.enable(element)把這個(gè) canvas 注冊(cè)成為一個(gè)可渲染的 cornerstone 元素。注冊(cè)加載器告訴 cornerstone 說wadouri這種協(xié)議的 imageId 歸我管。調(diào)用cornerstone.loadAndCacheImage(wadouri:/path/to/example.dcm)這時(shí) cornerstone 會(huì)從緩存里找找不到就調(diào)用加載器的loadImage方法。加載器內(nèi)部會(huì)用dicomParser解析文件把 DICOM 里的像素?cái)?shù)據(jù)解出來封裝成上面說的 Image 對(duì)象返回。cornerstone 拿到 Image 對(duì)象后調(diào)用cornerstone.displayImage(element, image)把圖像渲染出來。這個(gè)流程最關(guān)鍵的一步在于第 4 步像素?cái)?shù)據(jù)的封裝。DICOM 的像素?cái)?shù)據(jù)可能是經(jīng)過壓縮的JPEG Lossless、JPEG 2000、RLE 等也可能是未壓縮的原始數(shù)據(jù)像素位數(shù)可能是 8 位、16 位還可能是帶符號(hào)整數(shù)。Image 對(duì)象里的 getPixelData 返回的是一個(gè) Canvas 可以直接使用的一維數(shù)組通常是 Uint8Array 或 Uint16Array。16 位像素?cái)?shù)據(jù)是關(guān)鍵因?yàn)?CT、MR 這類模態(tài)的圖像動(dòng)輒 4000 多的像素值范圍不用 16 位根本存不下動(dòng)態(tài)范圍。我去翻了 Cornerstone Examples 倉庫的代碼它里面有個(gè)專門演示本地文件加載的例子核心邏輯就是上面這條鏈路代碼不長(zhǎng)但把協(xié)議注冊(cè)和加載兩個(gè)關(guān)鍵動(dòng)作都體現(xiàn)了import * as cornerstone from cornerstone-core; import * as cornerstoneWADOImageLoader from cornerstone-wado-image-loader; // 1. 初始化加載器必須 cornerstoneWADOImageLoader.external.cornerstone cornerstone; cornerstoneWADOImageLoader.external.dicomParser dicomParser; cornerstoneWADOImageLoader.init(); // 2. 在 DOM 上啟用一個(gè)渲染容器 const element document.getElementById(viewport); cornerstone.enable(element); // 3. 使用 wadouri 協(xié)議加載本地或遠(yuǎn)程 DICOM 文件 const imageId wadouri:https://example.com/dicom/example.dcm; cornerstone.loadAndCacheImage(imageId).then(image { cornerstone.displayImage(element, image); });這段代碼看著簡(jiǎn)單但有幾個(gè)容易踩的坑注意一下。首先external.cornerstone的賦值必須在 loadImage 被調(diào)用之前完成否則加載器內(nèi)部依賴的 cornerstone 實(shí)例是 undefined。其次enable只能調(diào)用一次重復(fù)調(diào)用會(huì)導(dǎo)致 canvas 被重復(fù)包裹事件監(jiān)聽渲染時(shí)可能出現(xiàn)圖形錯(cuò)亂。再者如果你的 DICOM 文件本身沒有窗寬窗位信息顯示出來可能一團(tuán)黑或者一團(tuán)白這不是渲染 bug而是你沒有做 VOI 適配后續(xù)要手動(dòng)設(shè) windowWidth 和 windowCenter。2.3 cornerstone-tools 的交互工具只是錦上添花嗎很多人會(huì)糾結(jié)是不是必須引入 cornerstone-tools 才能做交互其實(shí)不是純 cornerstone-core 也能手動(dòng)監(jiān)聽鼠標(biāo)事件來改 viewport 的縮放和平移但工作量不小而且要處理坐標(biāo)換算、Canvas 像素對(duì)齊這些雜事。cornerstone-tools 幫我們把這些常見交互封裝成了一個(gè)個(gè)可插拔的 tool比如 WindowLevelTool窗寬窗位調(diào)整、PanTool平移、ZoomTool縮放、LengthTool測(cè)量等等。這些工具本身也是通用的OHIF-Viewers 正是大量使用了 cornerstone-tools 的這套機(jī)制來實(shí)現(xiàn)閱片工作流的交互功能。但從 Cornerstone.js 實(shí)例學(xué)習(xí)的角度看我建議你先把 core 玩熟再碰 tools不然后面排查問題會(huì)分不清是渲染問題還是工具疊加問題。tools 只是給 core 套了一層交互殼它最終還是調(diào)用 cornerstone 的 setViewport 接口去改渲染參數(shù)。3. 實(shí)操一個(gè) Cornerstone 最小應(yīng)用本地 DICOM 文件渲染3.1 環(huán)境準(zhǔn)備與依賴安裝我用 Vite 搭建了一個(gè)最簡(jiǎn)單的純前端項(xiàng)目npm 安裝一下就完了比之前用 webpack 配 loader 省事太多。安裝這么幾個(gè)包就夠了npm install cornerstone-core cornerstone-wado-image-loader dicom-parser有個(gè)坑是cornerstone-core的包名和cornerstonejs/core是兩回事。前者是老的 Cornerstone.js 經(jīng)典版本現(xiàn)在仍在多數(shù) OHIF 版本中使用后者是 Cornerstone3D 的新一代 API。我們現(xiàn)在關(guān)注的 OHIF-Viewers 老架構(gòu)和大量線上項(xiàng)目用的都是經(jīng)典版本所以裝包的時(shí)候看仔細(xì)了別裝了新一代的包然后對(duì)著舊 API 調(diào)接口十個(gè)有九個(gè)要翻車。如果你用的是 Vite還可能要處理一下cornerstone-wado-image-loader里對(duì)window和document的引用問題常見做法是使用vite-plugin-global-this或者手動(dòng)在 HTML 里注入 polyfill這里不展開遇到再說。3.2 完整的最小代碼三步實(shí)現(xiàn) DICOM 渲染我把上面說的數(shù)據(jù)流用最精簡(jiǎn)的方式落地寫了這么一版可以直接在瀏覽器里跑的代碼。為了方便演示我直接從一個(gè)公開的 DICOM URL 加載文件省去本地上傳的步驟import * as cornerstone from cornerstone-core; import dicomParser from dicom-parser; import * as cornerstoneWADOImageLoader from cornerstone-wado-image-loader; // 初始化注入依賴 cornerstoneWADOImageLoader.external.cornerstone cornerstone; cornerstoneWADOImageLoader.external.dicomParser dicomParser; cornerstoneWADOImageLoader.init(); // 創(chuàng)建一個(gè)全屏的 canvas 容器 const element document.getElementById(dicomImage); cornerstone.enable(element); // 這是一個(gè)公開的測(cè)試 DICOM 文件你也可以換成自己的文件地址 const imageId wadouri:https://raw.githubusercontent.com/cornerstonejs/cornerstoneWADOImageLoader/master/test/images/CTMONO2_16.dcm; cornerstone.loadAndCacheImage(imageId).then(image { // 拿到 image 對(duì)象后設(shè)置初始窗寬窗位避免圖像發(fā)黑 const viewport cornerstone.getDefaultViewportForImage(element, image); cornerstone.displayImage(element, image, viewport); }).catch(err { console.error(加載 DICOM 圖像失敗, err); });這段代碼跑通后你就成功邁過了 Cornerstone.js 最核心的一道坎——把一個(gè)醫(yī)學(xué) DICOM 影像顯示在網(wǎng)頁 Canvas 上。如果你用的是本地文件在瀏覽器里可以通過創(chuàng)建Blob或File對(duì)象再用URL.createObjectURL生成 URL 傳給wadouri:協(xié)議。需要注意的一點(diǎn)是Cornerstone 對(duì)跨域資源有要求如果你的 DICOM 文件和前端頁面不在同一個(gè)域要在服務(wù)器上配置好 CORS 頭否則fetch會(huì)被瀏覽器攔截。在實(shí)際項(xiàng)目中我通常不會(huì)直接硬編碼 imageId而是封裝一個(gè)loadAndDisplayDicom(element, file)函數(shù)來接收 File 對(duì)象內(nèi)部先把 File 對(duì)象轉(zhuǎn)成 object URL再拼接成wadouri:協(xié)議傳給 cornerstone。這樣代碼更好復(fù)用用戶可以拖拽文件進(jìn)來就顯示。3.3 我實(shí)際跑通后看到的性能數(shù)據(jù)跑通以后我順手測(cè)了一下性能數(shù)據(jù)用的是上面那個(gè)公開的 CT 單幀圖像文件。這個(gè)文件是一個(gè)標(biāo)準(zhǔn)的多層 CT 掃描導(dǎo)出中間層畫幅 512x51216 位灰度單幀顯示模式。從點(diǎn)擊加載按鈕到圖像出現(xiàn)在 Canvas 上總共耗時(shí)大概在 280ms 左右其中網(wǎng)絡(luò)下載占了大概 150msDICOM 解析加像素?cái)?shù)據(jù)封裝占了 80ms剩下的時(shí)間是渲染。這個(gè)數(shù)據(jù)在本地測(cè)試環(huán)境下還湊合但如果是實(shí)際 PACS 系統(tǒng)里的圖像文件大小往往翻幾倍加載時(shí)間會(huì)線性上升。優(yōu)化手段一般是開 web worker 做解碼或者用 WADO-RS 走 dicomweb 協(xié)議在服務(wù)端做轉(zhuǎn)碼返回已經(jīng)抽好幀的圖像。關(guān)于優(yōu)化策略后面問題排查里我會(huì)提到。4. 窗寬窗位在實(shí)例里怎么用才順手4.1 為什么圖像顯示出來是灰蒙蒙的很多初學(xué)者第一次跑通上面的 demo會(huì)發(fā)現(xiàn)圖像顯示出來灰蒙蒙的對(duì)比度很差或者整個(gè)一片白、一片黑。這絕對(duì)是個(gè)高頻問題根源就在窗寬窗位Window Width / Window Level沒設(shè)置好。CT 圖像像素值范圍通常在 -1024 到 3071 之間而屏幕顯示灰度只有 0 到 255 的 8 位范圍如果直接把整個(gè)像素范圍線性映射到灰度那大部分軟組織細(xì)節(jié)都會(huì)擠在很窄的灰度區(qū)間里肉眼根本看不出來差別。所以 Cornerstone 在做渲染時(shí)要做一個(gè)映射你會(huì)定義窗寬和窗位比如窗寬 400、窗位 40意思是像素值 40-200 這個(gè)范圍映射到屏幕灰度 0-255小于 40 的顯示為黑色大于 200 的顯示為白色。這樣軟組織的細(xì)微密度差異就能被放大顯示出來了。乳腺鉬靶這種高分辨率圖像通常要配合固定的窗寬窗位顯示否則病灶區(qū)域很容易被淹沒在背景里。4.2 手動(dòng)調(diào)整窗寬窗位的代碼實(shí)現(xiàn)在 Cornerstone.js 里調(diào)整窗寬窗位有兩種思路一種是通過cornerstone.setViewport直接改 viewport 對(duì)象的 windowWidth 和 windowCenter 屬性另一種是調(diào)用 cornerstone-tools 里的 WindowLevelTool 做鼠標(biāo)拖拽交互。我先寫第一種簡(jiǎn)單直接const viewport cornerstone.getViewport(element); viewport.voi { windowWidth: 400, windowCenter: 40 }; cornerstone.setViewport(element, viewport); cornerstone.updateImage(element); // 觸發(fā)重繪很多人會(huì)疑惑為什調(diào)用setViewport之后還要再調(diào)一次updateImage不調(diào)行不行在不同版本的 cornerstone 中表現(xiàn)不一致有些內(nèi)部會(huì)觸發(fā)重繪有些不會(huì)所以為了穩(wěn)妥起見setViewport 之后顯式調(diào)一次updateImage保險(xiǎn)。這個(gè)已經(jīng)是我踩過無數(shù)遍的坑了。如果你希望用鼠標(biāo)拖拽來交互那就要引入 cornerstone-tools 并激活 WindowLevelTool核心代碼大致是這樣import * as cornerstoneTools from cornerstone-tools; cornerstoneTools.init(); cornerstoneTools.addTool(cornerstoneTools.WindowLevelTool); cornerstoneTools.setToolActive(WindowLevel, { mouseButtonMask: 1 });注意cornerstone-tools 的初始化必須先于激活任何工具之前完成而且如果你是用了自定義的 cornerstone 實(shí)例還需要做 external 依賴注入和 wado-image-loader 是同樣套路。4.3 預(yù)設(shè)置窗寬窗位不同模態(tài)的顯示策略實(shí)際閱片系統(tǒng)里不同檢查類型的圖像需要不同的顯示參數(shù)。CT 頭部一般用窗寬 80、窗位 40CT 腹部用窗寬 400、窗位 40肺部用窗寬 1500、窗位 -600。這些預(yù)設(shè)置在 Cornerstone 實(shí)例中如何落地一般做法是在加載完 image 對(duì)象后讀取 DICOM 標(biāo)簽里自帶的窗寬窗位或者根據(jù) modality 去查一個(gè)預(yù)設(shè)表。這兩種方法都可以在影像工作流里同時(shí)實(shí)現(xiàn)可以根據(jù)后端返回的元數(shù)據(jù)做判斷。我個(gè)人的做法是在loadAndCacheImage的 then 回調(diào)里先判斷圖像類型如果是 CT 就查預(yù)設(shè)表如果是 MR 就優(yōu)先使用 DICOM 自帶的窗寬窗位因?yàn)?MR 的像素值不像 CT 有標(biāo)準(zhǔn)化的 Hounsfield 單位每個(gè)序列的窗寬窗位差異很大用統(tǒng)一預(yù)設(shè)反而可能顯示不好。MR 圖像如果沒有 DICOM 自帶的窗寬窗位直接做一個(gè) min-max 歸一化把它撐滿到 0-255 顯示。5. 從單幀渲染走向序列閱片Viewport 與 Stack 管理5.1 Stack 是什么為什么要管理它醫(yī)學(xué)影像閱片的核心場(chǎng)景不只是看單張圖而是要看一個(gè)序列的幾十張、幾百張圖像比如一個(gè) CTA 檢查可能包含幾百幀血管造影序列。OHIF-Viewers 里就是通過 Cornerstone Tools 的 Stack 機(jī)制來管理多幀圖像的——你可以把一組 imageId 按順序放進(jìn)去然后通過StackScrollTool翻頁或者拖拽滾動(dòng)條來切換當(dāng)前顯示的圖像。Stack 不僅僅是數(shù)組它還維護(hù)了當(dāng)前幀索引、每個(gè)圖像加載狀態(tài)、以及圖像是否已緩存。Cornerstone 內(nèi)部有個(gè) LRU 緩存機(jī)制超過緩存上限的圖像會(huì)被自動(dòng)清理下次再顯示時(shí)需要重新加載。這個(gè)設(shè)計(jì)保證了瀏覽器內(nèi)存不會(huì)被無限拉高但也意味著如果序列特別長(zhǎng)翻頁回看前面圖像時(shí)可能會(huì)有短暫的白屏等待——這是緩存失效導(dǎo)致的不是 bug。5.2 用 cornerstone-tools 管理 Stack 的實(shí)例代碼使用addStackStateManager和addToolState來維護(hù) stack 狀態(tài)是 cornerstone-tools 推薦的做法代碼大致如下import * as cornerstone from cornerstone-core; import * as cornerstoneTools from cornerstone-tools; // 在啟用元素上注冊(cè) stack 狀態(tài) const stack { currentImageIdIndex: 0, imageIds: [ wadouri:https://example.com/dicom/1.dcm, wadouri:https://example.com/dicom/2.dcm, wadouri:https://example.com/dicom/3.dcm, // ... ] }; cornerstoneTools.addStackStateManager(element, [stack]); cornerstoneTools.addToolState(element, stack, stack); // 顯示當(dāng)前幀 const imageId stack.imageIds[stack.currentImageIdIndex]; cornerstone.loadAndCacheImage(imageId).then(image { cornerstone.displayImage(element, image); });翻頁的時(shí)候只需要更新 stack 里的currentImageIdIndex然后重新 load 顯示對(duì)應(yīng) imageId 的圖像。這里有一個(gè)性能優(yōu)化的技巧相鄰幀的圖像可以在后臺(tái)預(yù)加載。比如用戶正在看第 10 幀我可以同步發(fā)起第 11 幀的loadImage注意不是loadAndCacheImage不需要阻塞等待等用戶翻過去時(shí)圖像已經(jīng)緩存好了顯示就是即時(shí)的。這個(gè)技術(shù)我們?cè)趯?shí)際項(xiàng)目里叫prefetch一個(gè)很簡(jiǎn)單的兩行代碼就能提升翻頁體驗(yàn)一大截。5.3 從 Stack 到 Volume現(xiàn)代傾向如果你關(guān)注的是 OHIF 的后續(xù)版本會(huì)發(fā)現(xiàn)新一代的 OHIF基于 Cornerstone3D已經(jīng)全面轉(zhuǎn)向 Volume 渲染做 MPR、VR 三維重建等使用cornerstonejs/core的 Volume API 批量加載一整個(gè)序列的像素?cái)?shù)據(jù)然后用 GPU 紋理做渲染。但這并不代表經(jīng)典 Stack 模式過時(shí)了——大量 PACS 閱片場(chǎng)景仍然是 Stack 顯示為主三維只是輔助。所以掌握 Stack 機(jī)制依然是最值得投入的學(xué)習(xí)路徑。6. 常見問題與排查技巧實(shí)錄6.1 Cannot read property getAttribute of undefined 這類報(bào)錯(cuò)這個(gè)報(bào)錯(cuò)非常經(jīng)典我在弄 Cornerstone Examples 時(shí)候沒少被折磨。它的來源通常是cornerstone.enable(element)傳入的 element 是 null 或者尚未掛載到 DOM。常見場(chǎng)景是你在 Vue 或 React 組件的某個(gè)生命周期鉤子比如created里調(diào)用了 enable但此時(shí) ref 還沒綁定到真實(shí) DOM。解決辦法很簡(jiǎn)單確保 enable 在 DOM 掛載完成的時(shí)機(jī)調(diào)用比如 React 的useEffect或 Vue 的onMounted。另外一個(gè)隱藏原因是你調(diào)用了enable之后又在同一個(gè)容器上重新渲染了 DOM導(dǎo)致原有監(jiān)聽丟失此時(shí)應(yīng)該先cornerstone.disable(element)再重新enable。6.2 圖像一直加載不出來控制臺(tái)也沒有報(bào)錯(cuò)這個(gè)問題排查思路比較固定。首先確認(rèn) imageId 的協(xié)議前綴是否和已注冊(cè)的 loader 對(duì)應(yīng)。Cornerstone 查找 loader 是按協(xié)議前綴匹配的如果你 imageId 寫的是wadouri:但注冊(cè)的是dicomweb:它匹配不上直接返回 undefined。其次確認(rèn)網(wǎng)絡(luò)請(qǐng)求有沒有發(fā)出去打開 Network 面板看那個(gè) DICOM 文件的請(qǐng)求是否成功了注意是不是被 CORS 攔了。最后看一眼 wado-image-loader 的初始化代碼有沒有被正確執(zhí)行尤其是external.cornerstone和external.dicomParser的注入順序不能反。6.3 處理 16 位灰度圖像時(shí)的像素偏移問題有些 DICOM 圖像的像素值是帶符號(hào)的比如 CT 的像素值有負(fù)值空氣通常是 -1000。如果你在做像素處理時(shí)直接把它當(dāng)成無符號(hào)數(shù)讀比如new Uint16Array(buffer)那 -1024 會(huì)被讀成 64512整個(gè)圖像會(huì)變成一片雪花或者出現(xiàn)嚴(yán)重的偽影。這類問題是我在實(shí)際開發(fā)中遇到的最容易忽視又最耽誤時(shí)間的坑。解決辦法是在解析像素?cái)?shù)據(jù)時(shí)根據(jù) DICOM 標(biāo)簽0028,0103中的 Pixel Representation 判斷是有符號(hào)還是無符號(hào)然后對(duì)應(yīng)使用Int16Array還是Uint16Array。另外有一個(gè)經(jīng)驗(yàn)?zāi)憧梢韵葯z查一下 image 對(duì)象的minPixelValue和maxPixelValue屬性如果 minPixelValue 是個(gè)很大的正數(shù)那大概率讀取方式出了問題。6.4 在 Vue/React 里集成時(shí)注意銷毀機(jī)制框架集成時(shí)最常見的錯(cuò)誤就是在組件銷毀時(shí)沒有調(diào)用cornerstone.disable(element)。框架組件銷毀后canvas 從 DOM 上被移除但 cornerstone 內(nèi)部對(duì)元素的引用和事件監(jiān)聽還在輕則內(nèi)存泄漏重則下一個(gè)組件創(chuàng)建時(shí)因?yàn)?canvas 被復(fù)用而出現(xiàn)渲染錯(cuò)亂。我建議你在組件卸載鉤子里顯式調(diào)用 disable并且把之前設(shè)置的工具狀態(tài)一起清理干凈。React 里類似這樣useEffect(() { const element viewportRef.current; cornerstone.enable(element); // ... 加載圖像 return () { cornerstone.disable(element); }; }, []);還有一個(gè) Vue 項(xiàng)目里的坑如果在v-if控制的組件里使用 cornerstone 渲染建議先判斷 target 元素確實(shí)存在再 enable否則 Vue 渲染時(shí)機(jī)稍微一偏差就報(bào)錯(cuò)。穩(wěn)妥的做法是nextTick之后再調(diào)用相關(guān)方法。7. 寫在最后這一路走下來我的體會(huì)是 Cornerstone.js 這套架構(gòu)之所以能扎根這么多年靠的不是花哨的功能而是對(duì)邊界拿捏得極其克制——它只做渲染把加載、解碼、交互全部交給外部模塊按需組合。正是這種可插拔的設(shè)計(jì)讓它既能支撐 OHIF-Viewers 這種重量級(jí)框架也能安安靜靜地躺在一個(gè)簡(jiǎn)單的 HTML 頁面里渲染一張圖。如果你正準(zhǔn)備在項(xiàng)目里落地醫(yī)療數(shù)字閱片別急著把 OHIF-Viewers 整個(gè)拽進(jìn)來先花一兩天把 Cornerstone Examples 里的核心示例順序跑一遍從單幀渲染到多幀 Stack再疊加窗寬窗位交互和測(cè)量插件。把這些土地打扎實(shí)了再看 OHIF 的代碼你會(huì)發(fā)現(xiàn)它再復(fù)雜也只是對(duì)這些原語做了一層又一層精心的組織而已。等基礎(chǔ)設(shè)施理順了再考慮上 Cornerstone3D、Volume 渲染這些新花樣也不遲。最后再分享一個(gè)實(shí)用技巧調(diào)試時(shí)可以在瀏覽器控制臺(tái)直接拿到cornerstone.getViewport(element)返回值手動(dòng)改兩個(gè)字段然后調(diào) updateImage實(shí)時(shí)看顯示效果。這種方式對(duì)于快速驗(yàn)證窗寬窗位和顯示參數(shù)比改完代碼再刷新整個(gè)頁面高效得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天.com| 欧美25p| 九九综合网色全集 | 综合久久影院| 99精品视频免费观看| 久久婷婷五月天丁香| 九九热思思热| 人人亚洲| 色很很96| 天天做天天爱天天爽夜夜揉| 久久久久久久久久久久久久久久一道本| 天天做夜夜爽| 开心激情播播五月天| 久久9RE热视频精品98| 婷婷综合在线| 亚洲a色| 七七九九色色| 婷婷五月天最新综合你懂的 | 国色天香成人网| 亚洲激情综合| 丁香五月婷婷五月天| 久热天堂| 亚洲精品又粗又大又爽A片 | 久久婷婷内射| 五月丁香久| 丁香六月色婷婷综合| 97碰成超视频免费视频| 国产精品18久久久| 久久久国产精品黄毛片| AV在线资源| 久久丁香久久| 丁香婷婷深情五月亚洲| 婷婷伊人激情婷婷| 狠狠狠人妻| 91人人操| 国产 亚洲 在线| 日本色色色色色色色色一色二色| 9999三级片| 五月婷综合| 深爱五月天 开心网| www.com在线操视频免费观看| 五月停亭六月,六月停亭的英语 | 丁香五月婷婷香| 国产午夜精品AV一区二区麻豆| 国产精品久久久海的味道| 中文字幕婷婷| 99精品热视频只有精品10| 亚洲乱码日产精品BD| 亚洲国产精品VA在线看黑人| 午夜无码精品色综合久久| 97色久| 都市激情亚洲| wWwCom夜操wwW| 婷婷激情丁香五月天综合| 九月婷婷在线观看| 91无码视频| 91精品国产99久久久久久天美| 内射爽无广熟女亚洲| 综合网啪啪| 久久99大全| 97人人操| 无码少妇高潮喷水A片免费| 色色五月天网站| 亚洲美女网Va| 九九99久久| 国产在线aaa片一区二区99| 综合色影| XX色综合| 久久久ww| 九九亚洲视频| 六月丁香五月天| 婷色五月天| 五月天天丁香婷婷| 9久久久久久久久久久| 九久九精品| 亚洲成人电影在线免费观看| 午夜]香婷婷深深爱| 激情第四色| 久久婷婷七月丁香| 久99| 这里只有精品免费| 激情小说五月天| 久久婷婷六月综合国际| 亚州第一黄网| 天天弄天天爽| 天天天天天天操| www久久99| 激情小说五月天| WWW.桔色成人.COM| 激情五月久久| 丁香五月婷中字在线| 九九人人操| 婷婷色资源| 九九亚洲综合| 九九婷婷五月天| www.五月丁香| 婷婷丁香亚洲色综合91| 台湾综合丁香五月蜜桃| 丁香五月婷婷乱| 九九色热| 久综合4| 强伦轩人妻一区二区电影| 日韩无码性爱| 色综合久久久久久久久五月| 毛片毛片毛片毛片| 亚洲成人AV在线播放| 182TV大香蕉| 亚洲亚洲人成综合网络| 五月婷婷在线视频| 久久婷婷综合五月| 人妻videos人妻高清| 婷婷五月免费观看| www久| 亚州色综合| 99热这里只有精品10| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 97在线观视频免费观看| 激情五月天第四色| 九九精品视频在线6| 丁香婷婷激情网站| 欧美槡BBBB槡BBB少妇| 影音先锋秋秋五月婷婷| 99久久精品国产色欲| 高清av在线国产| 激情深爱婷婷网| 玖玖五月| 五月天丁香婷| 九九99九九99九九99视频网| 操精品9| 国产看真人毛片爱做A片| 久久您您综合网| 99热综合在线| 超碰亚洲天堂| www.99热日韩.com| 五月丁香久久| 五月天婷婷色小说| 五月停停99| 五月丁香婷婷激情| Aaa久久| 五月天婷婷在看| 二色AV| 91视频五月丁香| 亚洲无码色色| 激情AV在线| 超碰国产在线观看| av九九| 婷婷久久五月丁香| 丁香五月天欧美成人| 久久婷婷操| 天天操夜夜橾| 婷婷色偷拍| 噜噜精品| 99人碰碰碰| 26UUU欧美激情一区二区| 91男同视频| 伊人综合网4| 99热精品在线观看| 狠狠色噜噜狠狠| www.99色在线| 色综合久久99色| 91日视频| 91久操| 深爱激情五月天色婷婷| 99这里只有精品|v| 热99热9| 99热九九九九| 97碰在线| 先锋av性爱成人电影| 日本91在线| 大香蕉啪啪啪| 香蕉99网| 99热在线观看| 99国产性感视频| 色综合九九色综合88| 婷婷丁香五月在线播放| 嫩草AV久久伊人妇女超级A| 伊人久久大香天蕉亚洲特级| 日韩AV免费电影在线播放| 天堂网操| 荷兰av一级| 99玖玖精品| 色女伊人| 在线观看av网站| 色色五月婷婷久久| 99er这里只有精品视频| 色噜噜狠狠色综合网| 日韩精品无码一区二区| 草综合网| 五月开心播播网| 夜夜天天久久婷婷| 九九中文色色| 五月婷人妻| 久久黄色片| 夜夜爽天天日| 亚洲无码99| 五月婷成人| 大香蕉九九| 日韩一66精品| 丁香五月激情五月| 久久色天堂| 色婷婷基地在线| 九九视频在线| 激情久久综合网| 日本一区二区三区精品视频| 五月涩涩网| 丁香婷婷婷| 啪啪小说五月天| 99热99| 思思热在线视频99| 91超碰在线观看| 精品色色| 色爱五月天| 99热在线爱| 色色色五月婷| 亚洲成人电影aaaa| 五月天久久网站| 99热综合| 天天日夜夜| 色婷婷黄色网络| 精品一二三区久久AAA片| 婷婷激情小说网| 国产做爰视频免费播放| 五月丁香色婷婷基地| 国产精品18久久久| 性色婷婷| 五月天婷婷视频30| 丁香五月婷婷色| 国外亚洲成AV人片在线观看| 婷婷不卡基地| 九九热在线视频观看| 91av视频| 开心婷婷五月| 五月激情天| 婷婷五月天播| 日亚二欧美| 婷婷丁香五月综合| 久久综合五月天| 激情伊人六| 久久五月情| 亚洲成av人影院| 五月婷婷真爱激情网| 欧美日本99| 丁香五月天激情| 婷婷夜夜夜夜| 大香蕉久久伊人婷婷五月丁香| 色婷婷丁香| 狠狠五月天激情| 大香蕉久久久久| 欧美日韩婷婷五月天| 深爱五月日韩| 丁香桃色综合网| 日本91在线| 五月婷婷中文网| 九九色之九九色88| 久久一级免费黄色片| 日韩精品一品二区三区的使用体验| 综合色色综合| 4399精品一区二区| 丰满人妻妇伦又伦精品国产| 五月天婷婷在线AN| 五月丁香六月停停| 天天上天天爽| 综合激情五月四射婷婷| 亚洲情欲久久| 九月色婷婷综合亚洲| 五月婷婷日| 九热视频这里只有精品| 六月婷婷激情| 五月丁香色婷婷色| 热996精品在线观看| 99热1| 天天插天天| 五月丁香婷婷无码A∨| 丁香五月影院| 视频这里只有精品16| 超碰在线资源| 婷婷伊人综合| 久月久在线视频| 激情性爱五月天| 婷婷五月丁香五月综合网| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 日韩三十六页| 亲子乱AV-区二区三区| 性综合网| 丁香五月欧美午夜视频| 偷拍视频五月天| 中海油常州环保涂料有限公司| 日韩在线观看网址| 亚洲乱码日产精品BD| 亚洲va国产va天堂va综合va| 丁香婷婷十月| 久久婷婷五月天亚洲欧美| 亚洲综合一区二区| 色情久久久| 大香蕉Av在线| 九九精品综合| 91超级碰碰碰| 狠狠噪| 99热国品| 偷拍九九热| 综合福利网| 午夜亚洲AV日韩无码| 99干日本| 婷婷五月六月丁香| 五月丁香影院| 亚洲综合色成丁香五月色| 色五月激情五月| 97av在线视频| 国产精品一区在线观看你懂的| 六月婷婷八月丁香| 67194成I人在线观看线路1| www.激情五月天com| 91一起操| 婷丁五月| 99热在线观看免费| 五月婷婷啪啪| 五月天另类小说| 激情欧美五月丁香| 99re热视频这里只精品| CHINESE熟女老女人HD视频| 五月天无码| 色热久资源| 天天 青草 制服丝袜 在线| 六月激情婷婷综合| 91色在线 | 日韩| 任我鲁这里有精品视频| 九九精品热播| 婷婷性爱| 天天天天色天天天天天干| www.lingjunshare.com| 人妻 性久久久久久| 丁香婷婷激情综合五月激情 | 色五月成人| 另类综合激情| 内射人妻视频国内| 青青999| 亚洲久久日| 丁香六月婷婷开心| 小视频一区| 99热在线这里| 99黄色性生活| a免费在线| 精品99在线观看| 无码激情AAAAA片-区区| 婷婷不干网| 中文字幕无码成人电影| 久草性爱| 开心五月激情五月丁香五月婷婷| 婷婷五月图片小说视频| 九九热99热| 九九热精品视频| 婷婷.com| 亚洲激情在线| 成人丁香| 天天日天天肏天天奸| 性一交一乱一交A片久| 色色色五月婷婷| 亚洲黄网在线| 婷丁五月| 五月天综合色| 五月激香蕉网| 激情五月天婷婷图| 六月激情综合| 爆乳熟妇一区二区三区四区| 丁香五月天婷婷大香蕉| 婷婷综合视频| 啪啪婷婷五月天激情| 色婷婷五月天激情综合| 夜夜骑夜夜撸| 99精彩视频| 丁香婷婷成年| www.五月天婷婷.com| 婷婷色日本| 日亚二欧美| 精品亚洲国产成AV人片传媒| 9久热在线视频| 狠狠色五月激情| 五月婷婷AV| 婷婷丁香九色| 五月婷婷六月丁香| 五月色综合| 丁香五月婷婷色情综合| 久草大| 中文字幕综合色| 79亚洲精品少妇| 大香蕉婷婷五月| 超级碰人人操人人干| 成人在线综合| 色五月天婷婷| 婷婷综合玖玖五月| 亚洲va欧美va国产综合久久久| 婷婷亚洲欧美丁香五月| 天堂中文国产| 久草视频一,二三四| 激情五月婷婷丁香六月| 亚洲人人操BD| 综合色在线| 都市激情蜜桃婷婷五月天 | 激情九月婷婷九月| 欧美黑人巨大猛烈cuckold| 99精色| 日本女色人人| 五月天激情婷婷五月天久久| 91狠狠色丁香| 久久久久亚洲AV综合| 婷婷六月天| 激情五月丁香六月综合AVXXXX| 激情五月丁香婷婷夜夜操| 这里只有九九精品| 亚洲激情四射色| 天堂AV三级| 欧美色色色色色色色| 欧美69久成人做爰视频| 丁香激情五月少妇| 99热只有| 婷婷五月综合网| 殴美综合激情五月天免费视频| 亚洲色色色| 啪啪一区| 777精品久无码人妻蜜桃| 丁香五月婷婷激情四射| 九九精品在线网| 疯狂做受XXXX高潮A片| 久久婷婷亚洲无码一起| 亚洲色色色色| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 日韩色五月| 1024欧美看片| 五月色影院| 综合超碰熟| 狠狠操狠狠| 日韩狠狠色| 九九热中文| 色播丁香| 熟女少妇内射日韩亚洲| 丁香五月影院| 极品少妇高潮啪啪AV无码| 人伦30P| 天天狠狠夜夜狠狠2023| 天堂久久婷婷| 丁香六月激情综合| 5月婷婷性视频| 曰韩五月丁香色婷婷无码| 在线日韩视频| 天天插天天干| 婷婷.com| 九色91国产| 激情五月天综合| 丁香五月狠狠在线观看| 五月天开心激情综合网| 激情五月天婷婷直播| 五月婷在线| 原琪琪色影院| 日本色婷婷| 蜜乳9188| 色婷婷激情视频| 天天干,天天日| 色婷婷婷av| 四川BBB搡BBB搡多人乱亂| 激情婷婷内射| 九九精品re免费视频| 六月婷色六月| 91狠狠综合网| 一级片操逼视频| 五月婷亚洲精品| 九九综合伊人| 色五月 婷婷, 大香蕉| 99色区| 六月婷婷毛片| 色五月婷婷中文字幕| yellow视频在线观看91| 久久99网站| 婷婷五月天99| 另类激情五月| 国产av网| 亚洲视频99| 久久成人天| 男人天堂99| 少妇大叫太大太粗太爽了A片| 在线五月色播| 99福利导航| 91一起操| 亚洲色优| 日日射天天射| 六月色色| 黄页免费一级视频懂色| 天天综合五月天| www.色婷婷。com| www.久久婷婷| 九九婷| 97人人操人人干| 色色色色色色色色色999| 97伦乱| 在线播放成人网站| 丁香婷婷色| 久久99这里只有精品视频 | 久久99性爱| 99婷婷五月天| 亚洲成人AV在线播放| 五月天久久久| www.色婷婷.com| 丁香六月激情蜜桃| 青青草a在线| 在线观看av网站| 日本三级99人妇网站| 深爱婷婷网| 久久久人妻人伦| 日韩超碰在线| a色婷婷| 教师性爱毛片| 丰满少妇猛烈A片免费看观看| 天天干天天叉| 激情五月色综合国产精品| WWW.久久99| 丁香婷婷天堂| 亚洲无AV在线中文字幕| 99九九视频| 思思国产99| 天天天摸夜夜夜玩| 99久久99热这里只有精品| 一本九九色| 天天干人人奸97| 精品国产AV色一区二区深夜久久| 五月停停激情网| 91久久婷婷| 五月婷婷色影院| 色婷婷瘦婷婷日韩| 成人网丁香五月| 二区成人视频| 嫩草哈哈操| 丁香影院五月综合| 亚洲色图五月丁香五月婷婷| 日韩aaaaa| 色色免费网站| 亚洲超碰在线| 在线观看中文字幕| 91综合在线| 大香蕉五月天| 99热这里| 成人做爰A片免费看网站找不到了 国产露脸150部国语对白 | 丁香五月婷婷激情蜜桃| 97色婷| 九九性视频| 另类小说色婷婷| 99欧美| 1000部毛片A片免费观看| 久久激情天堂| 男女99免费视频| 亚洲激情在线| 中文字幕丰满孑伦无码专区| 婷婷五月色情天| 综合色色婷婷| 激情五月激情综合网| 日日操夜夜撸| 原琪琪色影院| 欧美成人精品三区综合A片| 丁香狠狠色婷婷| 91色逼| 五月香婷婷| 色婷婷电影网| 欧美性猛交 XXXX 乱大交| 五月激情啪啪| 婷婷五月花| 一级黄在线| 另类国产欧美视频| 大香蕉伊人爱在线| 天天色一道本综合婷婷| 五月婷婷综合激情| 五月丁香狠狠爱婷婷综合| 五月丁香啪啪| 森林影视大全,最好看的2019年视频 | 天堂二区| 久xxxx| www.婷婷亚洲基地| 九九成人高清视频| 午夜色丁香| 色五月激情综合| 操逼视频一区| 亚洲中文字幕在线观看| 五月丁香六月激情综合| AV九九| 色婷婷五月天偷拍| 97婷婷狠狠| 国产精品久久久久久久久久| www.zbzhongsen.com| 久久综合丁香激情五月| 国产午夜一区二区三区| 五月婷婷性爱| 亚洲婷婷五月天| 大香人妻| site:901-07.com| 99热最新网址| www.色五月.com| 免费无码毛片一区二区A片 | 天天操加勒比| 久久五月婷综合网| 青青草原伊人网| 99热在线观看精品| OYIWbGcPu8H| 五月色色网| 成人婷婷五月| 粉嫩av蜜桃av蜜臀av| 色色色色五月天| 奇米色大香蕉| 深爱五月激情综合| 播播网色播播| 亚洲春色奇米影视| 色五月91| 99热免费观看| 国产成人精品一区二三区熟女在线| 精品无码久久久久久久久 | 婷婷王月天影院| 丁香五月婷婷啪啪| 操比激情五月| 婷婷五月天受日本法律保护| 丁香五月天综合网| 综合久| 超碰97久久| 五月丁香婷婷成人伊人网| 婷婷激情丁五月| 色色色色五月天| 欧美日韩色色| 综合狠狠干| 色综合色五月| 激情四射婷婷| 99A片| 做爰丰满少妇1313| 久久黄A片| 久色婷婷200| 超碰在线观看三级片| 岛国资源站| 色五月视频无码播放| 夜夜夜夜撸夜夜操| 婷婷在线中文字幕| 婷婷色激情网| 日本久久综合| 激情五月综合久久| AAAA网站| 日B日潘金莲BB| 少妇久久诱惑视频| 婷婷午夜| 99色精品视频| 亚洲日日日| WWW.99热| 亚洲最大在线| AV色婷婷| 天天综合 99久久婷婷| 激情五月天色色网| 婷香五月| 九九综合| 九九色视频| 成人国产欧美大片一区| 一起草日本| 99热这里只有精品热| 色色网站| 五月丁香| 五月天激情网图片| 99综合视频在线| 五月天五月天成人网亭亭成人色网站| 五月天婷a在线| 啪啪啪啪五月天| 五月丁香久久| 怡红院院在线导航网 | 婷婷五月欧美| 激情五月天小说| 99啪啪骑| 精品人妻伦一二三区久久| 嫩草AV久久伊人妇女超级A| 99热99| 久久草婷婷丁香网站| 色婷婷狠狠| 久久久久9| 91 九色 熟女| 丁香五月婷婷亚洲色图| 亚洲婷婷五月天| 久久九九国产| 5月丁香啪啪啪| 99re熱| 另类天堂| 乱色色色| 色综合天天| 久久综合婷婷五月| 五月婷婷色色| 五月色婷婷AV| 狠狠色噜噜狠狠亚洲A∨| 色欲丁香久久| 九九爱精品网站| 久久九九色| 玖玖爱综合网| 99精品久久| 丁香五月亚洲综合| 97碰碰人人视频| 99ri在线观看视频| 亚洲色爽| 色九月综合| 一级二级色大片| 996er在线观看| Av狠狠色丁香婷| 五月婷婷六月丁香综合| 丁香花综合永久入口| 婷婷综合成人五月天| 日产精品久久久久久久蜜臀| 丁香五月网络网络| 真实的国产乱XXXX在线91| 精品无码色欲AV| 狠狠狠狠狠狠草| 亚洲av网站| 色日本丁香婷婷| 丁香婷婷欧美综合| 久99热在线观看| 五月天久久婷婷婷| 久久aaaaa| 在线观看中文字幕| 五月婷色啪| 久久色婷婷| .精品久久久麻豆国产精品| 热久久99视频| 91丨九色丨老农村| 成人做爰A片免费看视频| 天天做天天干天天综合网| 极品人妻VIDEOSSS人妻| 99热这里精| 婷婷99狠狠躁天天躁中文| www.久久久.com| 五月婷婷婷婷婷婷艺术| 天天干天天av天天射| 26uuu另类亚洲欧美日本一| 婷婷丁香18| 九九爱这里只有精品| 国产熟妇的荡欲午夜视频| 91视屏在线观看com.wwwvv| 98国产精品综合一区二区三区| 色婷婷婷婷成人网| 激情五月婷婷视频一区二区三区| 综合色影| 亚洲成色综合网站免费观看| 色色色色欧美| 亚洲六月色婷婷| 色婷婷六月精品| 五月丁香激情啪啪| 婷婷五月激情综合啪啪| 丁香六月在线| 亚洲天堂色色| 五月天电影网| 青草性爱视频| 97成人丁香婷婷| 91丁香| 碰碰碰97国产| 女人高潮内射99精品| 狠狠做深爱婷婷久久综合一区| 99色在线观看视频| 久久这里只有精品视频15| 狠狠操狠狠插| 五月丁花六月丁香综合| 91久久久久久久久久久| 国产做爰视频免费播放| 欧美影院| 五月丁激情| 日本色频| 天天搡日日搡aaaaⅩ| 成人综合视频网址| 99久久久| 色婷婷小说网| 五月激情站| 六月丁香六月婷婷欧美| 五月婷婷在线短视频| 婷婷五月五月丁香| 亚洲精品久久久久AV无码| 色色色综合网| 丁香五月天论坛| 这里只有精品69| 五月丁香青草综合啪啪| 99自拍网| 超碰成人av| 九九色区| 思思99久久| 久激情| 五月婷婷丁香啪啪| 五月丁香成年黄色| 激情五月婷婷她| 国模狼狼| 香蕉久久五月| 九九色中文| 日韩av免费版| 中文字幕天天干| 成片免费观看大全| 丁香五月婷婷综合激情啪啪啪啪啪啪啪 | 天天弄天天爽| 久久er视频6| 日日夜夜狠狠婷婷色| 九九九九成人| 99少妇精品| 99热 日韩| 午夜激情四射影院| 99丝袜精品视频网站| 激情丁香五月婷婷| 99精品视频在线观看| 综合网五月| 五月天亚洲综合网| 亚洲婷婷五月天| 色色色五月婷婷| 99色在线视频| 五月婷婷色| 九九热免费视频| 亚洲网站观看视频| 人操91在线| 久久精品系列| 99综合在线| 99热精品中文字幕| 婷婷九月| 色啦啦视频| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 伊人9999| 久久精热| 色丁香婷婷| 色五月婷婷网| 日本三级99人妇网站| 日日干夜夜干| 日逼影音先锋男人资源站| 亚洲亚洲人成综合网络| 看片视频在线免费日产在线看| 91视频五月丁香| 免费观看的av| 婷婷丁香五月天综合激情| 婷婷色婷婷| 婷婷综合丁香| 内射综合网| 久久6这里只有精品| 开心激情站| 色情成人五月天| 91九色无码日韩| 思思热99er在线视频| 激情5月舔| 日撸夜撸日操| 久久伦乱| 欧美大肥婆大肥BBBBB| 风流少妇A片一区二区蜜桃 | 97碰人人操| 玖玖视频福利| www一区二区三区| 99操碰| 婷婷色色亚洲| 亚洲六月色婷婷| 99精品7| 五月婷中文字幕| 国产成人精品123区免费视频 | 六月丁香婷婷色69| 97五月天| 99re6在线视频精品免费| 精品一二三区久久AAA片| 极品人妻VIDEOSSS人妻| 国产暴力强伦轩1区二区小说| 天天天天天日| 开心婷婷五月综合| 亚洲婷婷激情综合激情999精品| 丁香五月天91| 极品人妻VIDEOSSS人妻| 99热这里是精品| 青青艹b| 免费色色色| 日本啪啪网| 亚洲六月综合激情久久下卡| 人操91在线| 成人羞羞啪啪 全 视频| 色色婷婷综合网| 粉嫩av懂色av蜜臀av熟妇| 五月丁香影院| 99热这里是精品| AV动漫不卡无码免费| 久久久网站| 五月丁香婷婷免费视频| www,久久久| 大香蕉久久久久久久久| 色你久久| 色婷婷综合视频| 中文字幕无码人妻少妇免费视频| 99综合五月免费视频色婷婷| 日本久久人| 国产精品久久久60086| 日韩淑女人妻luan伦激情精品一区二 | 91青娱乐青青草| 五月天夜夜爱夜夜操| 久久久久久久久99精品| 五月丁香啪啪| 婷婷情色五月天| 亚洲无码99| www.金莲av| 久久黄色网扯| 激情久久久久久| 热婷婷在线视频| 日本ww亚洲| 欧美综合123区| 日本色色网站| 伊人五月天在线| 丁香五月天AV在线| 天天日夜夜夜操操操操| 人人摸人人| 韩国中文字幕91| 伊人婷婷激情| 久热久| 五月丁香婷婷综合网| 人草人人| 中文字幕丰满乱孑伦无码专区| 2017人人操| 天插天啪天啪天啪| 久久久久久久久月丁| 五月激情婷婷综合| 播五月开心婷婷欧美综合| 日日夜夜婷婷| 天天日色情| 激情综合网,婷婷五月天| 九九五月天| 成人五月天丁香婷| 日韩超碰在线| 激情综合网五月丁香| 精品九九视频在线观看| 91综合国免费久入| 色五月丁香五月| 丁香六月婷婷综合| 色狠狠综合网| 婷婷丁香五月亚洲17cao| 狠狠干狠狠操狠狠爱| 开心深爱五月天| 色区久久| 99色热视频| 久久R激情| www.五月天。com| 一本久久婷婷| 99re热免费观看视频精品| 噜噜噜狠狠色综合| 五月天综合区| 伊人九热| 久久久久丁香婷婷五月天| 亚洲精品第一色色色色色色| 婷婷伊人| 人妻中文在线| 婷婷五月婷婷五月| 七七色综合| 五月丁香六月激情视频| 97成人丁香| 五月色影院| www.91婷婷| 婷婷六月色| 五丁香激情综合| 万月丁香狠狠爱| 婷婷深爱五月天| 色五月色图| 精品人妻久久久久久| 激情AV| 欧美日韩成人| www,婷婷五月天,com| 人妻丰满精品一区二区A片| 一级片sese片.COM| 五月丁香在线| er99免费视频在线| 97人人妻人人艹| 99热8| 综合视频久久| 婷婷久久五月| 色情五月天婷婷| 综合五月天| 天天开心AV色综合婷婷五月天| 超碰成人免费| 另类综合婷婷五月天欧美视频| 成人龟情网丁香五月| 色婷婷视频| 国产av一区二区三区| 成人欧美一区二区三区在线观看| 六月丁香网| 开心婷婷五月花| 丁香五月婷婷久久久| 天堂草在线观看| 久久99婷婷| 五月婷婷六月丁香| 五月婷婷在线免费| 亚洲综合新99视频| 97碰操| 五月天婷婷色| 五月天另类图片| 99熟女视频| 六月成人网| 色婷婷伊人| 夜夜操少妇| 影音先锋一区二区三区| 亚洲欧美成人在线| 去干网最新版本亚洲版| 99热97美女| 激情综合五月| 五月天激情视频五月天| 老师把我爽高潮了免费A片| 久久丁香综合| 五月激情婷婷开心五月| 亚洲va久久久噜噜噜久久天堂| 性99网站| 婷婷丁香五月综合| 四色五月视频| 欧美大肥婆大肥BBBBB| 天天橾日日橾夜夜橾17| 热99一二三| www久| 婷婷色五月婷| 玖玖资源站视频| 色噜噜狠狠色综合无码久久欧美| 国产69久久久欧美黑人A片 | va婷婷在线| 99re热在线视频观看| 99色性爰网络| 丁香五月在线观看| 婷婷伊人激情婷婷| 丁香五月婷婷激情小说| 99精品成人无码A片观看金桔| 丁香五月激情婷婷| 秋霞电影一级黄| 97干综合网| 久久99jiu9| 四川BBB搡BBB搡多人乱亂| 欧美成人精品老美女噜噜噜| 五月天婷婷香蕉狠狠超碰综合| 五月丁香六月激情欧美综合| 婷婷五月天在线观看av| 麻豆精品| 日韩欧美不卡| 五月丁香色情| 99热这| 超碰97免费在线| 色噜噜狠狠一区二区三区| 成人网址在线观看| 五月亭亭色| 日韩有码一区| 色婷婷在线电影| 亚洲综合婷婷| AV五月丁香| 免费在线观看欧美激情xx小视频| 色婷婷黄色网络| 久久9热| 久久一伦| 人妻AV在线观看| 高清无码视频网址| 六月丁香色婷婷| 五月婷婷插一插| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 六月婷婷视频| 五月婷婷色五月| 色色cOm| 另类丁香五月天区图| 99超碰在线观看| 色婷婷五月天av在线| 日本99在线视频| 亚洲色热| 67194中文字幕| 天天弄天天操| 猫咪伊人久久| 五月婷啪啪| 亚洲成人网站在线播放| 伍月婷丁香花全集| 婷婷五月精品在线| 久久综合天天综合| 丁香婷婷啪啪啪| 五月丁花色综合网| 五月天色网站| 99热国产在| 天天综合天天做天天综合| 久久色五月| 久艹大香蕉| 大香蕉久操| 亚洲操人| 99 频99热国里只有精品| 2050人人操免费工开爱| 婷婷六月色开 | 激情综合网激情五月天| 狠狠摸狠狠摸| 六月婷婷色综合| 极品另类| 婷婷五月综合激情| www.夜夜操.com| 婷婷色五月天在线| 开心五月天激情网| 内射爽无广熟女亚洲| 亚洲热综合| 色婷婷狠狠| 狠狠操狠狠色| 婷婷亚州综合| 色9月| 思恩热国产视频右线观看| 婷婷五月天黄色网址| 欧美毛卡| 九九热最新| 国产精品久久久久久久久久| 天天日天天插| 538在线精品| 久久午夜丁香| 久久婷婷五月丁香网| 国产综合久久久777777| 亚洲在线成人| 人妻视频在线| 婷婷五月天xxx| 一本综合丁香日日狠狠色| 久久性爱视频| yazhouzonghesese| 婷婷婷婷色| 五月天婷婷在线播放| 另类专区在线观看| 日本一级黄色电影| 国产麻豆视频| 色九月国产| 男人天堂伊人五月丁香| eeuss人妻| 婷婷色狠狠| 国产欧美第五十五页| 婷婷五月色综合| 99色在线| 久久亭亭电影| 九玖视频这里只有精品| 99久久婷婷国产综合精品草原| 5月激情天| 三级大香蕉网| 色99欧洲色19| 久久激情五月婷婷| 蜜臀综合久草| 九九99久久| 五月婷婷激情综合拍| 激情色视频| 91色五月| 婷婷五月激情综合网| 色五月美女| 99无码超碰| 草做免费在线观看| 五月丁香综合啪啪| 九九久99免费视频| 久久只有精| 五月欧美丁香在线观看| 色久影院| 日本99热| 丁香婷婷五月六月久久| 97天堂| 五月婷激情| 亚洲精品色| 一起草Av| 丁香五月天成人| 五月丁香六月婷综合成人综合| 国产精品国产成人国产三级| 丁香花社区av| 久久99久久99精品免视看婷| 国产精品久久久99视频| 操逼123网| 亚洲操逼片| 激情婷婷综合网| 同性gv国产精品一区二区| 亚洲丁香五月| 91啪啪视频| 97色图片中文字幕视频在线观看| 天天综合情| 狠狠干天天日| 五月激情综合婷婷| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 五月天色婷婷激情综合| 色综合五月在线| 五月天色综合| 五月婷视频在线观看| 六月丁香色色| 日日做天天操夜夜爽| 天天做天天要天天爱| 久久欧洲综合网| 丁香六月激情| 超碰精品国产首页| 天天操天天曰天天射| 99re在线观看视频| 久久草中文日韩欧美| 欧美人与性动交CCOO| 中文超碰视在线| xxx综合在线| 久久人妻精品| 天堂网色婷婷| 日日日天天干| 国产午夜精品一区二区三区四区| 97成人在线视频精品| 色色五月天婷婷| 美女网黄| 色婷婷在线影院| 久久婷婷五月天蜜桃| 国产91视频| 婷婷五月综合丁香久久| 五月丁香六月婷综合成人综合| 97色伦另类图片小说视频 | 天天搞天天色综合| 六月色婷婷| 色色五月婷婷| 成人AV中文字幕| 亚洲无aV在线中文字幕 | 五月天激情婷婷丁香| 婷婷导航| 玖玖在线| 精品久久9| 99九九视频| 男人的天堂五月丁香| 无码免费人妻A片AAA毛片西瓜| 综合视频久久| 91人碰| 婷婷午夜综合| 综合色影院| 97碰碰在线看视频免费| 五月欧美色色五月| 色婷婷香蕉在线| 婷婷丁香五月,狠狠综合| 丁香五月天天日| 日日撸夜夜操| 久去色色| 国产精品人成A片一区二区| 九九精品婷| 色婷婷亚洲婷婷| 丁香婷婷色情| 99操碰| 开心婷婷五月天综合| 久久久久亚洲AV无码网影音先锋| 超碰只有精品在线| 这里只有精品在线看| 色婷视频| 色五月婷婷激情五月| 99视频在线| 狠狠夜夜五月丁香| 大陆极品少妇内射AAAAAA| 伊人影音无码一区二区三区| 色综合色色色| 欧美天堂久久| 九九香蕉网| 激情综合网婷婷久久| 日本久久综合| 久久五月天合网| 精品久久久久成人码免费动漫| 99热这里只有精品手机在线观看| 9久久久久| 天天搞夜夜叫| 超碰v| 噜噜精品| 五月天丁香婷| 久久五月婷| 99re这里只有精品首页| 99久久国产宗和精品1上映| 那里有AV网址| 99综合五月免费视频色婷婷| 99热国产国产| 色婷婷影视99| 97婷婷丁香| 五月天六月天| 91久久18| www狠狠| 激情五月天啪啪| 日韩精品无码AV| 玖玖婷婷五月天| 丁香五月在线视频黑人| 亚洲亚洲人成综合网络| 久青青久| 中文字幕在线日亚洲9| 97亚洲色 torrent magnet| 色色性爱视频| 天天搞夜夜爽夜夜爽| www.99视频| 午夜婷婷五月天在线| 狠狠插.com| 翔田千里 50岁 无码| 色婷婷久久综合久色综| 国产精品色色| 高潮毛片遮挡费高一百度| 色色色综合网| 色色色色色色网站| 色亚洲视频|