node-itk

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

npm install node-itk
42 downloads in the last month

node-itk【内测阶段:每周更新一次, 接口会有变动】

node-itk是itk的nodejs封装。主要目的是为了用于教学、快速生成和构建基于Web Services的医学图像处理。初衷来自于作者的硕士研究工作Jolly,构建一种适合于图像处理的框架。

版本说明

  • 版本号 0.1.9
    • 增加LabelMap、LabelObject
    • 增加Histogram
    • 增加图像处理:
      • OtsuThresholdImageFilter
      • BinaryContourImageFilter
      • LabelContourImageFilter
      • AggregateLabelMapFilter
      • BinaryImageToStatisticsLabelMapFilter
      • LabelMapToLabelImageFilter
      • BinaryImageToLabelMapFilter
      • GradientAnisotropicDiffusionImageFilter
      • RobustAutomaticThresholdImageFilter
      • AdaptiveHistogramEqualizationImageFilter
      • BinaryFillholeImageFilter
    • Toodo 文档还没有来得及更新,请参考example
  • 版本号 0.1.8
    • 增加NodeMatrix和NodeVariableSizeMatrix用作矩阵操作
    • 增加由图像转为NodeVariableSizeMatrix的接口
  • 版本号 0.1.7
    • 修复了ScaleCast的Bug
    • 引入二值图像的形态学操作
    • 增加一个能够析取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(尺寸(以数组或是整数指示每一维), 像素值(数组代表是彩色))

创建一个101010的红色图像:

var image = NodeImage('rgb', '3');
image.CreateImage([10,10,10], [255,0,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在线文档

  • 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: 取值为0,1,2....
  • Order: 阶数(取值为1,2,3...)
  • 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

  • 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

矩阵操作

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
npm loves you