UNPKG

node-itk

Version:

ITK is an open-source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. Among them, Node-ITK is a node.js wrapper which built on top of ITK, intended to facilitate its use in rapid prototyping, education, and web servies for Medical Image Processing.Its Origins by My master thesis--jolly, a new Framework for Medical Image Processing

949 lines (706 loc) 31.5 kB
## node-itk【内测阶段:每周更新一次, 接口会有变动】 node-itkitknodejs封装。主要目的是为了用于教学、快速生成和构建基于Web Services的医学图像处理。初衷来自于作者的硕士研究工作Jolly,构建一种适合于图像处理的框架。 ## 版本说明 - 版本号 0.1.9 - 增加LabelMapLabelObject - 增加Histogram - 增加图像处理: - OtsuThresholdImageFilter - BinaryContourImageFilter - LabelContourImageFilter - AggregateLabelMapFilter - BinaryImageToStatisticsLabelMapFilter - LabelMapToLabelImageFilter - BinaryImageToLabelMapFilter - GradientAnisotropicDiffusionImageFilter - RobustAutomaticThresholdImageFilter - AdaptiveHistogramEqualizationImageFilter - BinaryFillholeImageFilter - Toodo 文档还没有来得及更新,请参考example - 版本号 0.1.8 - 增加NodeMatrixNodeVariableSizeMatrix用作矩阵操作 - 增加由图像转为NodeVariableSizeMatrix的接口 - 版本号 0.1.7 - 修复了ScaleCastBug - 引入二值图像的形态学操作 - 增加一个能够析取RGB各分量图的操作 - 增加了三张测试图 ## 使用说明 node-itk不需要安装ITK。使用前仅需要require node-itk即可 require("node-itk") 当前仅支持windows平台。 ### NodeImage 封装ITK图像类型,并具有基本的读写功能。 #### 图像像素类型 - char - unsigned char - short - unsigned short - int - unsigned int - long - unsigned long - float - double - rgb unsigned char #### 创建图像对象 原型: NodeImage(类型, 维数) 示例: 创建一个的2维灰度图像对象 var image = NodeImage('uchar', 2) 或者 var image = NodeImage('unsgined char', 2) #### 填充图像 原型: Fill(灰度值) or Fill(彩色值) 彩色值以Javascript表示 示例: 白色填充 imgae.Fill(0) 红色填充 image.Fill([255,0,0]) #### 初始化图像 初始化图像有两种方式 - 通过读取图像 原型: Read(文件路径, 图像类型) 图像类型省略将会根据文件名自动判断 当前支持类型有: - tiff - jpg - dicom - png - bmp 读取一个jpg image.Read('x.jpg', 'jpg) - 通过手工创建 原型: CreateImage(尺寸(以数组或是整数指示每一维), 像素值(数组代表是彩色)) 创建一个10*10*10的红色图像: var image = NodeImage('rgb', '3'); image.CreateImage([10,10,10], [2550,0]); #### 写出图像文件 原型 Write(文件名, 图像类型), 图像类型省略将会根据文件名自动判断 写JPG文件 image('x.jpg', 'jpg') #### 读取像素 - GetValue(), 获取像素值,灰度值返回数值,彩色值返回Javascript数组 - GetGreyValue(),获取灰度值,只针对灰度图像 - GetRGBValue(), 获取彩色值,只针对彩色图像 例子见example/pixel.js #### 写像素 - SetValue(像素值), 设置像素值,灰度值传数值,彩色值传入Javascript数组 - SetGreyValue(像素值),设置灰度值,只针对灰度图像 - SetRGBValue(像素值), 设置彩色值,只针对彩色图像 例子见example/pixel.js #### 图像类型转换 有时需要对图像类型转换以便于图像处理。node-itk有两种转换 - Cast(图像像素类型) 对图像类型转换 - ScaleCast(图像像素类型) 对图像像素值转换 例子见example/rgb.js #### 转换成矩阵 - 接口名: ToMatrix - 参数:无 - 返回类型: VariableSizeMatrix 示例参见[example/nodeVariableSizeMatrix.js] ### 图像处理 图像处理封装成ImageFilter方法,调用方式如下: var cannyimage = node_itk.ImageFilter({ "InputA": image, // 输入图像,若是二元处理,则参数InputB代表第二张图 "FilterName":"CannyEdgeDetectionImageFilter", // 图像处理的算法名,与ITK一致,只是去除开头的itk "Variance":5.0, // 输入的参数,与ITK设置函数一致,仅是去除Set,例如这里对应ITK的函数为SetVariance "UpperThreshold":0.9, "LowerThreshold":0, // 回调函数,用于对图像处理的进度进行处理 "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ /* 图像处理完成后的回调函数,通过一javascript对象返回, r.OK=true代表成功,r.ErrorMsg代表出错消息, r.Output代表输出的图像 */ if(r.OK){ r.Output.Write('CannyEdgeDetection.bmp', 'bmp') console.log(r); }else{ console.log(r); } }}); #### 二元阈值分割 输入javascript对象说明: - FilterName: ThresholdImageFilter - InputA: 输入图像 - LowerThreshold: 阈值下界 - UpperThreshold: 阈值上界 - OutsideValue: 阈值区间外的填充像素值 - InsideValue: 阈值区间内的填充像素值 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/binarythreshold.js]: Number.prototype.toPercent = function(n){n = n || 0;return ( Math.round( this * Math.pow( 10, n + 2 ) ) / Math.pow( 10, n ) ).toFixed( n ) + '%';} var node_itk = require('node-itk'); var path = require('path') var image = new node_itk.NodeImage('uchar',2); image.Read('uchar', 2, path.resolve(__dirname, 'Data/BrainProtonDensitySlice.png'), 'png'); var binaryimage = node_itk.ImageFilter({ "InputA":image, "FilterName":"BinaryThresholdImageFilter", "LowerThreshold":150, "UpperThreshold":180, "OutsideValue": 0, "InsideValue": 255, "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('binaryimage.bmp', 'bmp') console.log(r); }else{ console.log(r); } }}); #### 阈值分割 与二元阈值分割相似,只是缺少InsideValue输入参数。 示例[example/threshold.js]: var binaryimage = node_itk.ImageFilter({ "InputA":image, "FilterName":"ThresholdImageFilter", "LowerThreshold":170, "UpperThreshold":190, "OutsideValue": 0, "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('ThresholdImageFilterOutputBelow.bmp', 'bmp') console.log(r); }else{ console.log(r); } }}); #### Canny边缘提取 输入javascript对象说明: - FilterName: ThresholdImageFilter - InputA: 输入图像 - Variance 为高斯平滑参数 - MaxError 为高斯平滑参数 - UpperThreshold, 输出图像的阈值上限 - LowerThreshold,输出图像的阈值下限 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/cannyedge.js]: var cannyimage = node_itk.ImageFilter({ "InputA": image, "FilterName":"CannyEdgeDetectionImageFilter", "Variance":5.0, "UpperThreshold":0.9, "LowerThreshold":0, "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('CannyEdgeDetection.bmp', 'bmp') console.log(r); }else{ console.log(r); } }}); #### 图像归一化 令图像像素均值为0。输入javascript对象说明: - FilterName: NormalizeImageFilter - InputA: 输入图像 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/normalize.js]: var normalized = node_itk.ImageFilter({ "InputA":image, "FilterName":"NormalizeImageFilter", "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('NormalizeImage.bmp', 'bmp') console.log(r); }else{ console.log(r); } }}); #### 图像像素值线性拉伸 - FilterName: NormalizeImageFilter - InputA: 输入图像 - Shift: 移动的像素值 - Scale: 像素值的缩放比例 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/shiftscale.js]: var shiftscale = node_itk.ImageFilter({ "Input":image, "InputA":image, "FilterName":"ShiftScaleImageFilter", "Shift":10, "Scale": 1.0, "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('ShiftScale.bmp', 'bmp') console.log(r) }else{ console.log(r); } }}); #### 图像非线性拉伸 [itk在线文档](http://www.itk.org/Doxygen/html/classitk_1_1SigmoidImageFilter.html) - FilterName: SigmoidImageFilter - InputA: 输入图像 - OutputMinimum: 输出的最小像素值 - OutputMaximum: 输出的最大像素值 - Alpha: 用户提供的拉伸因子 - Beta: 用户提供的拉伸因子 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/sigmoid.js]: var sigmoid = node_itk.ImageFilter({ "InputA":image, "FilterName":"SigmoidImageFilter", "OutputMinimum":0, "OutputMaximum": 255, "Alpha":10.0, "Beta":150.0, "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('sigmoid.bmp', 'bmp') console.log(r) }else{ console.log(r); } }}); ### 图像运算:绝对值 - FilterName: AbsImageFilter - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeAbsImageFilter.js]: Number.prototype.toPercent = function(n){n = n || 0;return ( Math.round( this * Math.pow( 10, n + 2 ) ) / Math.pow( 10, n ) ).toFixed( n ) + '%';} var node_itk = require('./node-itk'); var image = new node_itk.NodeImage('float',2); image.CreateImage([200,300], 0); for(var i = 200 - 1; i >= 0; i--){ for (var j = 300 - 1; j >= 0; j--) { image.SetGreyPixel(i,j,i-j) } } var output = node_itk.ImageFilter({ "InputA":image, "FilterName":"AbsImageFilter", "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('AbsImageFilter.bmp', 'bmp') console.log(r) }else{ console.log(r); } }}); var viewer = new node_itk.NodeQuickView(); viewer.AddImage({"Input":image,"Flipvertical":true}) viewer.AddImage({"Input":output,"Flipvertical":true}) viewer.Visualize(); ### 图像运算:反余弦 - FilterName: AcosImageFilter - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeAbsImageFilter.js]: Number.prototype.toPercent = function(n){n = n || 0;return ( Math.round( this * Math.pow( 10, n + 2 ) ) / Math.pow( 10, n ) ).toFixed( n ) + '%';} var node_itk = require('./node-itk'); var image = new node_itk.NodeImage('float',2); image.CreateImage([10,10], 0); var k=0; for(var i = 0; i <10; i++){ for (var j = 0; j <10; j++) { image.SetGreyPixel(i,j,k++/99.0) } } var output = node_itk.ImageFilter({ "InputA":image, "FilterName":"AcosImageFilter", "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('AcosImageFilter.bmp', 'bmp') console.log(r) }else{ console.log(r); } }}); var res = new Array(10); for (var i = 0; i < 10; i++) { res[i] = new Array(10); } for(var i = 0; i <10; i++){ for (var j = 0; j <10; j++) { res[i][j] = image.GetGreyPixel(i,j) } } console.log(res); for(var i = 0; i <10; i++){ for (var j = 0; j <10; j++) { res[i][j] = output.GetGreyPixel(i,j) } } console.log(res); ### 图像运算:绝对差值 - InputA: 输入图像1 - InputB: 输入图像2 - FilterName: AbsoluteValueDifferenceImageFilter - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 注明:结果为|InputA-InputB| 示例[example/nodeAbsoluteValueDifferenceImageFilter.js] ### 图像运算:像素值累加(沿指定维,降维操作) - InputA: 输入图像 - FilterName: AccumulateImageFilter - AccumulateDimension: 维标(取值为1,2,3...n) - Average: 是否对累加值求均(默认false) - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeAccumulateImageFilter.js] ### 图像运算:像素值均值(沿指定维,降维操作) - InputA: 输入图像 - FilterName: GetAverageSliceImageFilter - AveragedOutDimension: 维标(取值为1,2,3...n) - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeGetAverageSliceImageFilter.js] ### 图像运算:求导(沿指定维) - InputA: 输入图像 - FilterName: DerivativeImageFilter - Direction: 取值为012.... - Order: 阶数(取值为123...) - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeDerivativeImageFilter.js] ### 图像运算:梯度算子 - InputA: 输入图像 - FilterName: GradientMagnitudeImageFilter - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeGradientMagnitudeImageFilter.js] ### 图像运算:带高斯平滑的梯度算子 - InputA: 输入图像 - FilterName: GradientMagnitudeRecursiveGaussianImageFilter - Sigma: 高斯平滑因子 - NormalizeAcrossScale:是否规范化 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeGradientMagnitudeRecursiveGaussianImageFilter.js] ### 图像平滑:均值滤波 - InputA: 输入图像 - FilterName: MeanImageFilter - Radius: Javascript数组,代表每一维的半径长 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeMeanImageFilter.js] ### 形态学结构元素说明 包含三类结构元素: - 二值球状(BINARY_BALL) - 二值十字线(BINARY_CROSS) - 平直结构元素(Flat) - 环状(Annulus) - 球状(Ball ) - 盒状( Box ) - 十字线(Cross) - 多边形状(Polygon) 默认为二值球状。结果元素半径通过Radius属性设置 ### 二值形态学操作:腐蚀 具体说明参见[itkBinaryErodeImageFilter](http://www.itk.org/Doxygen44/html/classitk_1_1BinaryErodeImageFilter.html) - InputA: 输入图像 - FilterName: BinaryErodeImageFilter - BoundaryToForeground:默认为false,可省 - ForegroundValue:前景值,可省 - BackgroundValue: 背景值,可省 - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例:[example/nodeBinaryErodeImageFilter.js] ### 二值形态学操作:膨胀 - InputA: 输入图像 - FilterName: BinaryDilateImageFilter - BoundaryToForeground:默认为false,可省 - ForegroundValue:前景值,可省 - BackgroundValue: 背景值,可省 - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例:[example/nodeDilateImageFilter.js] ### 二值形态学操作:闭操作 - InputA: 输入图像 - FilterName: BinaryMorphologicalClosingImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例:[example/nodeBinaryMorphologicalClosingImageFilter.js] ### 二值形态学操作:开操作 - InputA: 输入图像 - FilterName: BinaryMorphologicalOpeningImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例:[example/nodeBinaryMorphologicalOpeningImageFilter.js] ### 二值形态学操作:针对图像对象的腐蚀操作 - InputA: 输入图像 - FilterName: ErodeObjectMorphologyImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 ### 二值形态学操作:针对图像对象的膨胀操作 - InputA: 输入图像 - FilterName: DilateObjectMorphologyImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 ### 二值形态学操作:图像细化(骨架化) - InputA: 输入图像 - FilterName: BinaryThinningImageFilter - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例 Number.prototype.toPercent = function(n){n = n || 0;return ( Math.round( this * Math.pow( 10, n + 2 ) ) / Math.pow( 10, n ) ).toFixed( n ) + '%';} var node_itk = require('node-itk'); var path = require('path') var image = new node_itk.NodeImage('uchar',2); var image = new node_itk.NodeImage('uchar',2); image.CreateImage([100,100], 0); for(var i = 20; i<80; i++){ for (var j = 50; j <55 ; j++) { image.SetGreyPixel(i,j,255) } } var output = node_itk.ImageFilter({ "InputA":image, "FilterName":"BinaryThinningImageFilter", "Progress": function(progress){console.log('处理进度:'+progress.toPercent(2))}, "Finish": function(r){ if(r.OK){ r.Output.Write('BinaryThinningImageFilter.bmp', 'bmp') console.log(r) }else{ console.log(r); } }}); output = output.ScaleCast('uchar'); var viewer = new node_itk.NodeQuickView(); viewer.AddImage({"Input":image,"Flipvertical":true}) viewer.AddImage({"Input":output,"Flipvertical":true}) viewer.Visualize(); ### 二值形态学操作:图像修剪 - InputA: 输入图像 - FilterName: BinaryPruningImageFilter - Iteration: 迭代次数 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例[example/nodeBinaryPruningImageFilter.js] ### 二值形态学操作:带连通的闭操作 - InputA: 输入图像 - FilterName: BinaryClosingByReconstructionImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 ### 二值形态学操作:带连通的开操作 - InputA: 输入图像 - FilterName: BinaryOpeningByReconstructionImageFilter - Radius:结构元素半径,Javascript数组 - ElementType:结构元素类型【BINARY_BALL || BINARY_CROSS || Flat】 - Shape: 若ElementType为Flat时有效,为一javascript对象,Type指明形状【Annulus || Ball || Box or Cross || Polygon】 - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 ### 析取RGB各分量 - InputA: 输入图像 - FilterName: ExtractRGBChannelFilter - Channel: 取值为[ R || G || B ] - Progress: 回调函数,用于对图像进度进行控制(多用于交互的进度显示) - Finish: 回调函数,用于对图像处理完成的响应,返回javascript对象说明: - OK : true代表图像处理成功, false代表图像处理失败 - ErrorMsg: 当OK=false时,包含出错的文本消息 - Output: 输出的结果,仅当OK=true时有效 示例参见[example/nodeExtractRGBChannelFilter.js] ### 图像显示-quickview 为了能够便于对比图像处理结果,node-itk包含一个实用显示功能quickview。 示例[example/cannyedge.js] var viewer = new node_itk.NodeQuickView(); viewer.AddImage({"Input":image,"Flipvertical":true}) viewer.AddImage({"Input":cannyimage,"Flipvertical":true}) viewer.Visualize(); 通过AddImage可以往显示界面中增加图像。参数说明: - Input: 要显示的图像 - Flipvertical: 是否翻转图像(可省) - Description: 图像下方的文本描述(可省) ![quickview](http://www.itk.org/Wiki/images/a/a9/ITK_Examples_Baseline_ImageProcessing_TestSigmoidImageFilter.png) ## 矩阵操作 node-itk包含两类**2维**矩阵 - NodeMatrix - NodeVariableSizeMatrix ### NodeMatrix Matrix的大小是确定的矩阵,当前仅有2x2, 3x3, 4x4方阵。仅用作图像处理辅助,一般不使用。 ### NodeVariableSizeMatrix 维数可变的2维矩阵。 #### 创建矩阵 传入矩阵的行,列数,若缺少列数代表创建方阵,示例如下(创建一个2x2矩阵): m2 = new node_itk.NodeVariableSizeMatrix(2); #### 获取矩阵行数 - 接口名:Rows - 参数: 无 - 返回类型:整型 #### 获取矩阵列数 - 接口名:Cols - 参数: 无 - 返回类型:整型 #### 填充矩阵 - 接口名:Fill - 参数: 数值 - 返回类型:填充后的矩阵 #### 设置为单位矩阵 - 接口名:SetIdentity - 参数:无 - 返回类型: 设置后的矩阵 #### 矩阵转置 - 接口名:GetTranspose - 参数:无 - 返回类型: 转置后的矩阵 #### 矩阵是否不相等 - 接口名:NEQ - 参数:要比较的矩阵 - 返回类型: 布尔类型 #### 矩阵是否相等 - 接口名:EQ - 参数:要比较的矩阵 - 返回类型: 布尔类型 #### 获取矩阵的元素 - 接口名:GetElement - 参数:行号,列号 - 返回类型: 数值 #### 设置矩阵的元素值 - 接口名:SetElement - 参数:行号,列号,元素值 - 返回类型: 数值 #### 矩阵相加 - 接口名:Add - 参数:JS数组或矩阵 - 返回类型: 相加后的矩阵 #### 矩阵相减 - 接口名:Sub - 参数:JS数组或矩阵 - 返回类型: 相减后的矩阵 #### 矩阵除 - 接口名:Div - 参数:数值 - 返回类型: 相除后的矩阵 #### 矩阵乘 - 接口名:Div - 参数:数值,一维数组、两维数组和矩阵 - 返回类型: 相乘后的矩阵 #### 矩阵赋值 - 接口名:Assign - 参数:两维数组和矩阵 - 返回类型: 赋值后的矩阵 #### 获取矩阵一行元素 - 接口名:GetRow - 参数:行号 - 返回类型: 一维JS数组 #### 打印矩阵 - 接口名:ToString - 参数:无 - 返回类型: 可打印的字符串 #### 转换为JS数组 - 接口名:ToArray - 参数:无 - 返回类型: 两维JS数组 #### 矩阵求逆 - 接口名:GetInverse - 参数:无 - 返回类型: 逆矩阵 #### 转为图像 - 接口名:ToImage - 参数:字符串表示像素类型,默认为double - 返回类型:图像 示例参见[example/nodeVariableSizeMatrix.js] ## TODO - 引入图像变换 ## 安装相关问题 若提示不是有效的windows应用程序时,请在bin文件夹安装相关的vcredist(x64 or x86) ## 联系方式 欢迎你对node-itk提出宝贵意见。node-itk还在不断完善 - 作者: 丘文峰(summit chiu) - Email: summit_mail@qq.com