surfaceDiceHighlight = (background, input, targetId) => {
const bg_image = new Image();
bg_image.src = URL.createObjectURL(background);
const image = new Image();
image.src = URL.createObjectURL(input);
image.onload = function() {
const { cv } = window;
const contour_src = new cv.imread(image);
const ct_scan = new cv.imread(bg_image);
cv.imshow(targetId, ct_scan);
cv.cvtColor(contour_src, contour_src, cv.COLOR_RGBA2GRAY, 0);
cv.threshold(contour_src, contour_src, 120, 200, cv.THRESH_BINARY);
let contours = new cv.MatVector();
let hierarchy = new cv.Mat();
cv.findContours(contour_src, contours, hierarchy, cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE);
let contour_img_for_distance = cv.Mat.ones(contour_src.cols, contour_src.rows, cv.CV_8UC1);
let contour_img_for_coloring = new cv.Mat(contour_src.cols, contour_src.rows, cv.CV_8UC4, new cv.Scalar(0,0,0,255));
let color = new cv.Scalar(0, 255, 0, 255);
let color2 = new cv.Scalar(0);
let color3 = new cv.Scalar(255, 255, 255, 255);
cv.drawContours(ct_scan, contours, -1, color, 1, cv.LINE_8, hierarchy, 160);
cv.drawContours(contour_img_for_distance, contours, -1, color2, 1, cv.LINE_8, hierarchy, 160);
cv.drawContours(contour_img_for_coloring, contours, -1, color3, 1, cv.LINE_8, hierarchy, 160);
// Calculate distance transform
let dist = new cv.Mat(contour_src.cols, contour_src.rows, cv.CV_8UC1);
cv.distanceTransform(contour_img_for_distance, dist, cv.DIST_L2, 3);
let threshold = new cv.Mat(contour_src.cols, contour_src.rows, cv.CV_8UC1);
cv.threshold(dist, threshold, distance_threshold, 255, cv.THRESH_BINARY_INV);
let imgNormalize = new cv.Mat(contour_src.cols, contour_src.rows, cv.CV_8UC1);
console.log(type2str(imgNormalize.type()));
cv.normalize(threshold, imgNormalize, 0, 1.0, cv.NORM_MINMAX);
console.log(type2str(imgNormalize.type()));
imgNormalize.convertTo(imgNormalize, cv.CV_8UC4);
console.log(type2str(imgNormalize.type()));
cv.cvtColor(imgNormalize, imgNormalize, cv.COLOR_GRAY2RGB);
console.log(type2str(imgNormalize.type()));
let diff = new cv.Mat(contour_src.cols, contour_src.rows, cv.CV_8UC4, new cv.Scalar(0,0,0,255));
// console.log(type2str(contour_img_for_coloring.type()));
// cv.cvtColor(contour_img_for_coloring, contour_img_for_coloring, cv.COLOR_RGB2RGBA);
// console.log(type2str(contour_img_for_coloring.type()));
// cv.cvtColor(imgNormalize, imgNormalize, cv.COLOR_GRAY2RGB);
// console.log(type2str(imgNormalize.type()));
// cv.absdiff(contour_img_for_coloring, imgNormalize, diff);
// Show result and clean up
cv.imshow(targetId, contour_img_for_coloring);
contour_src.delete(); ct_scan.delete(); contours.delete(); hierarchy.delete(); contour_img_for_distance.delete(); dist.delete(); threshold.delete();
imgNormalize.delete();
diff.delete();
// mask.delete();
contour_img_for_coloring.delete();
};
}