diglettk
Version:
A medical imaging toolkit, built on top of vtk.js
62 lines (54 loc) • 1.77 kB
JavaScript
import vtkForwardPass from "@kitware/vtk.js/Rendering/OpenGL/ForwardPass";
import vtkConvolution2DPass from "@kitware/vtk.js/Rendering/OpenGL/Convolution2DPass";
function getConvolutionPass(kernel, kernelDimension, delegates = null) {
const convolutionPass = vtkConvolution2DPass.newInstance();
if (delegates !== null) {
convolutionPass.setDelegates(delegates);
}
convolutionPass.setKernelDimension(kernelDimension);
convolutionPass.setKernel(kernel);
return convolutionPass;
}
function getEdgeEnhancement1Pass(k, delegates = null) {
return getConvolutionPass(
[0, -k, 0, -k, 1 + 4 * k, -k, 0, -k, 0],
3,
delegates
);
}
function getEdgeEnhancement2Pass(k, delegates = null) {
return getConvolutionPass(
[-k, -k, -k, -k, 1 + 8 * k, -k, -k, -k, -k],
3,
delegates
);
}
function getEdgeEnhancement3Pass(k, delegates = null) {
return getConvolutionPass(
[-k, -2 * k, -k, -2 * k, 1 + 12 * k, -2 * k, -k, -2 * k, -k],
3,
delegates
);
}
function getGaussianBlurPass(delegates = null) {
return getConvolutionPass([1, 2, 1, 2, 4, 2, 1, 2, 1], 3, delegates);
}
export function getRenderPass(type, value) {
let renderPass = vtkForwardPass.newInstance();
let gaussianRenderPass = vtkForwardPass.newInstance();
let gaussianPass = getGaussianBlurPass([gaussianRenderPass]);
switch (type) {
case 1:
renderPass = getEdgeEnhancement1Pass(value, [gaussianPass, renderPass]);
break;
case 2:
renderPass = getEdgeEnhancement2Pass(value, [gaussianPass, renderPass]);
break;
case 3:
renderPass = getEdgeEnhancement3Pass(value, [gaussianPass, renderPass]);
break;
default:
console.warn("no edge enhancement of type ", type);
}
return renderPass;
}