成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Gpu.js 在醫(yī)學(xué)檢查影像顯示-Web 版的運(yùn)用

開發(fā) 前端
醫(yī)學(xué)檢查影像顯示里邊,調(diào)窗是一個(gè)基礎(chǔ)的常用操作:通過滑動(dòng)鼠標(biāo)來改變窗寬窗位的大小,窗寬(寬度)、窗位(中心點(diǎn))其實(shí)就是一個(gè)像素?cái)?shù)值的區(qū)間,圖像的所有像素點(diǎn)的像素值在這個(gè)區(qū)間的就顯示,不在區(qū)間的就不顯示。

[[426748]]

本文轉(zhuǎn)載自微信公眾號(hào)「微醫(yī)大前端技術(shù)」,作者楊廣。轉(zhuǎn)載本文請(qǐng)聯(lián)系微醫(yī)大前端技術(shù)公眾號(hào)。

前言

醫(yī)學(xué)檢查影像顯示里邊,調(diào)窗是一個(gè)基礎(chǔ)的常用操作:通過滑動(dòng)鼠標(biāo)來改變窗寬窗位的大小,窗寬(寬度)、窗位(中心點(diǎn))其實(shí)就是一個(gè)像素?cái)?shù)值的區(qū)間,圖像的所有像素點(diǎn)的像素值在這個(gè)區(qū)間的就顯示,不在區(qū)間的就不顯示。

在 web 版閱片器(圖像顯示工具)的開發(fā)工程中發(fā)現(xiàn),在對(duì) dr、dx 這種大圖(圖像普遍是 2000px 左右寬高的圖像,每個(gè)像素大小是 16 位或者 32 位的)進(jìn)行調(diào)窗時(shí),瀏覽器直接卡死,圖像顯示變化有很大延遲。后來查閱資料,使用 gpujs 來實(shí)現(xiàn)調(diào)窗時(shí)圖像的處理,結(jié)果:調(diào)窗時(shí)圖像顯示變化變得比較線性,性能估計(jì)提升 5/6 倍,能滿足業(yè)務(wù)需求。當(dāng)然,圖像的一些高級(jí)處理,都是可以用 gpujs 來實(shí)現(xiàn),調(diào)窗只是一個(gè)點(diǎn)。

使用前效果:

使用后效果:

什么是 GPU.js?

GPU.js 是用于 Web 和 Node.js 中的 GPGPU(GPU 上的通用計(jì)算)的 JavaScript 加速庫(kù)。GPU.js 自動(dòng)將簡(jiǎn)單的 JavaScript 函數(shù)轉(zhuǎn)換為著色器語言并編譯它們,以便它們?cè)谀?GPU 上運(yùn)行。使用 GPU 執(zhí)行大規(guī)模并行 GPGPU 計(jì)算,當(dāng) GPU 不可用時(shí),優(yōu)雅的純 JavaScript 回退。

GPU,全稱 Graphics Processing Unit,即圖像處理器,早期主要用于顯示圖像使用。因?yàn)閳D像處理主要偏簡(jiǎn)單的矩陣運(yùn)算,邏輯判斷等很少,因此 GPU 的設(shè)計(jì)跟 CPU 架構(gòu)不一樣,也因此做到一個(gè) GPU 上可以有很多計(jì)算單元,可以進(jìn)行大量并行計(jì)算。網(wǎng)上找到一個(gè)視頻,應(yīng)該是 Nvidia 某年的產(chǎn)品發(fā)布會(huì),形象地演示了 CPU 跟 GPU 的區(qū)別。http://v.youku.com/vshow/idXNDcyNTc1MjQ4==.html 。知乎上也有對(duì) CPU 和 GPU 的對(duì)比 https://www.zhihu.com/question/19903344

例如用 GPU.js 編寫的矩陣乘法(對(duì)大小為 512 x 512 的 2 個(gè)矩陣執(zhí)行矩陣乘法)。把計(jì)算 512 x 512 矩陣(2D 數(shù)組)的單個(gè)元素的 javascript 函數(shù)轉(zhuǎn)換而來的 GPU 加速內(nèi)核。內(nèi)核函數(shù)在 GPU 上串聯(lián)運(yùn)行,通常會(huì)導(dǎo)致非常快速的計(jì)算!你可以在這里運(yùn)行一個(gè)基準(zhǔn)測(cè)試。通常,它的運(yùn)行速度會(huì)快 1-15 倍,具體取決于您的硬件。

由于架構(gòu)設(shè)計(jì)不一樣,GPU 很適合做簡(jiǎn)單的并發(fā)計(jì)算,應(yīng)用于圖像處理、深度學(xué)習(xí)等領(lǐng)域能大大加快速度。當(dāng)然直接用 gpu 去開發(fā)程序很難編寫,一般都是由特殊編譯器將代碼編譯成可以在 gpu 上執(zhí)行的代碼。本文提到的 gpu.js 就是在前端將 js 的一個(gè)子集編譯成能在 webgl 上執(zhí)行的一個(gè)編譯器。更多使用場(chǎng)景 demo 請(qǐng)參照官網(wǎng) https://gpu.rocks/#/examples。

在使用上遇到的坑

使用 npm 引入 gpu.js 包,發(fā)現(xiàn)項(xiàng)目運(yùn)行不起來,可能和機(jī)器有關(guān)系,后來改成直接用 browser 方式引入 js 文件

我們是使用 canvas 方式來直接輸出像素?cái)?shù)據(jù)的,對(duì)不同大小的圖像要使用不同大小的 canvas,使用同一個(gè) canvas 會(huì)有些像素清不掉,試用了其他方法清除:沒有起到效果

canvas 方式像素?cái)?shù)據(jù)的原點(diǎn)位置,原點(diǎn)是在左下角

創(chuàng)建內(nèi)核,內(nèi)核里邊的函數(shù)或者自定義函數(shù),在打包過程中被壓縮、簡(jiǎn)化處理后會(huì)出現(xiàn)問題:被轉(zhuǎn)換后的某些運(yùn)算符 gpu.js 不支持。所以 js 的壓縮轉(zhuǎn)化規(guī)則要做具體的設(shè)置

因?yàn)槊總€(gè)設(shè)備的 gpu 特性不一樣,使用 gpujs 庫(kù)可能有未知異常,總之加上 try { } catch () { 普通處理 cpu } 能解決大多數(shù)問題。

  1. # 在 index.html 中引入 gpu.js 
  2. <script type="text/javascript" src="./static/gpu-browser.min.js"></script> 
  3. # 開始使用 
  4. var  gpu = new GPU(); 
  5. gpu.addFunction(function1) # 添加自定義函數(shù) 
  6. gpu.addFunction(function12) # 添加自定義函數(shù) 
  7. # 創(chuàng)建 Kernel 
  8. var kernel =  gpu.createKernel(function(參數(shù) 1,參數(shù) 2,...) { 
  9.     # 調(diào)窗實(shí)現(xiàn)算法 
  10.     # 
  11.     # 
  12.     # 
  13. }, 
  14. {   
  15.   graphical: true
  16.   output: outputsize 
  17. }) 
  18. # 執(zhí)行 Kernel 
  19. kernel(入?yún)?shù) 1,入?yún)?shù) 2,...); 
  20. var canvasRender = kernel.canvas; 
  21. # 直接顯示 canvasRender, .... 

官方使用場(chǎng)景 demo

地址:https://gpu.rocks/#/examples

An example with the shiny new v2 of GPU.js, "Cosmic Jellyfish"

A simple example to load an image into GPU.js.

GPU Accelerated Heatmap using GPU.js

A simple example wherein colors slowly fade in and fade out.

Browser

  1. <script src="dist/gpu-browser.min.js"></script> 
  2. <script> 
  3.     // GPU is a constructor and namespace for browser 
  4.     const gpu = new GPU(); 
  5.     const multiplyMatrix = gpu.createKernel(function(a, b) { 
  6.         let sum = 0; 
  7.         for (let i = 0; i < 512; i++) { 
  8.             sum += a[this.thread.y][i] * b[i][this.thread.x]; 
  9.         } 
  10.         return sum
  11.     }).setOutput([512, 512]); 
  12.     const c = multiplyMatrix(a, b); 
  13. </script> 

 

 

Node

  1. const { GPU } = require('gpu.js'); 
  2. const gpu = new GPU(); 
  3. const multiplyMatrix = gpu.createKernel(function(a, b) { 
  4.     let sum = 0; 
  5.     for (let i = 0; i < 512; i++) { 
  6.         sum += a[this.thread.y][i] * b[i][this.thread.x]; 
  7.     } 
  8.     return sum
  9. }).setOutput([512, 512]); 
  10.  
  11. const c = multiplyMatrix(a, b); 

示例

在本例中,兩個(gè) 512x512 矩陣(二維數(shù)組)相乘。計(jì)算是在 GPU 上并行完成的。

1.生成矩陣

  1. const generateMatrices = () => { 
  2.    const matrices = [[], []] 
  3.    for (let y = 0; y < 512; y++){ 
  4.      matrices[0].push([]) 
  5.      matrices[1].push([]) 
  6.      for (let x = 0; x < 512; x++){ 
  7.        matrices[0][y].push(Math.random()) 
  8.        matrices[1][y].push(Math.random()) 
  9.      } 
  10.    } 
  11.    return matrices 
  12.  } 

2.創(chuàng)建“內(nèi)核”

  1. const gpu = new GPU(); 
  2.  const multiplyMatrix = gpu.createKernel(function(a, b) { 
  3.    let sum = 0; 
  4.    for (let i = 0; i < 512; i++) { 
  5.      sum += a[this.thread.y][i] * b[i][this.thread.x]; 
  6.    } 
  7.    return sum
  8.  }).setOutput([512, 512]) 

3.以矩陣為參數(shù)調(diào)用內(nèi)核

  1. const matrices = generateMatrices() 
  2. const out = multiplyMatrix(matrices[0], matrices[1]) 

4.輸出矩陣

console.log(out[y][x]) // Logs the element at the xth row and the yth column of the matrix

console.log(out[10][12]) // Logs the element at the 10th row and the 12th column of the output matri

小結(jié)

gpu.js 是在前端將 js 的一個(gè)子集編譯成能在 webgl 上執(zhí)行的一個(gè)編譯器,簡(jiǎn)單、實(shí)用,能快速出結(jié)果,在對(duì)性能要求高、又耗時(shí)的運(yùn)算可以考慮使用 gpu.js 來實(shí)現(xiàn)。

參考資料

官網(wǎng) https://gpu.rocks/#/

github https://github.com/gpujs/gpu.js

 

更多例子 https://gpu.rocks/#/examples

楊廣: 微醫(yī)前端技術(shù)部前端工程師。有志成為一名全棧開發(fā)工程師甚至架構(gòu)師,路漫漫,吾求索。生活中通過健身釋放壓力,思考問題。

 

責(zé)任編輯:武曉燕 來源: 微醫(yī)大前端技術(shù)
相關(guān)推薦

2020-12-01 06:53:37

GPUJavaScript

2022-07-20 16:29:12

戴爾

2015-09-22 13:38:47

醫(yī)學(xué)醫(yī)療智能

2015-10-19 10:15:24

醫(yī)療影像智能

2019-03-28 09:00:00

AI人工智能醫(yī)學(xué)影像

2020-12-17 09:01:20

暗網(wǎng)數(shù)據(jù)泄漏攻擊

2017-09-07 14:57:47

2021-01-12 10:25:58

人工智能醫(yī)學(xué)影像深度學(xué)習(xí)

2020-12-24 14:13:53

AI

2020-06-12 17:23:40

人工智能技術(shù)醫(yī)學(xué)

2012-10-18 10:15:50

IBMdw

2021-01-14 10:56:13

人工智能大數(shù)據(jù)醫(yī)學(xué)影像

2021-01-12 10:37:45

人工智能醫(yī)學(xué)影像智能識(shí)別

2023-05-29 13:03:54

GPUWebWebGPU

2023-10-10 10:02:32

2015-09-08 14:23:00

新醫(yī)學(xué)影像中科金證華為

2021-01-18 11:23:21

AIAI+醫(yī)療醫(yī)學(xué)影響

2013-03-18 09:59:01

Leadtek Wi

2019-10-21 15:30:54

JS技巧前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线看国产| 亚洲国产高清高潮精品美女 | 国产在线观看网站 | 99视频在线看 | 欧美一区二区另类 | 中文一区 | 91久久看片| 亚洲欧美日韩精品久久亚洲区 | 超碰在线免费av | 欧美性一区二区三区 | 亚洲综合色视频在线观看 | www.国产精品 | 成人免费视频网站在线观看 | 在线视频中文字幕 | 一级做a爰片性色毛片视频停止 | 国产福利在线 | 中文字字幕一区二区三区四区五区 | 久久国产婷婷国产香蕉 | 午夜影院网站 | 精品日韩一区二区 | 亚洲第1页 | av免费在线播放 | 91.com在线观看| 国内自拍偷拍视频 | 日韩精品视频在线 | 毛片视频免费 | 欧美日韩一区在线 | 久久亚洲视频 | 欧美一级免费看 | 五月综合激情在线 | 麻豆毛片 | www.国产精| 精品国产精品国产偷麻豆 | 久久久九九九九 | 国产精品久久久久久影视 | 在线精品亚洲欧美日韩国产 | 欧美色综合网 | 国产激情视频在线免费观看 | www.中文字幕| 黄色网址大全在线观看 | 伊人春色在线观看 |