From aeb2618a345dd7a180faa505d74a1b735da07202 Mon Sep 17 00:00:00 2001 From: Pierre Colle Date: Sat, 12 Nov 2016 17:34:06 +0100 Subject: [PATCH] revert dct example --- examples/mat-dct.js | 116 ++++---------------------------------------- 1 file changed, 9 insertions(+), 107 deletions(-) diff --git a/examples/mat-dct.js b/examples/mat-dct.js index ec9d193..b3fa89f 100644 --- a/examples/mat-dct.js +++ b/examples/mat-dct.js @@ -1,120 +1,22 @@ var cv = require('../lib/opencv'); -var createGaussianKernel = function(sigma){ - var cst = 1; - var denom = (2*sigma*sigma); - var factor = 100; - return { - get : function(i,j){ - //console.log(cst, denom, ((i/10)*(i/10)+(j/10)*(j/10)), denom, Math.exp((i*i+j*j)/denom)) - return cst*Math.exp(-1*(i*i+j*j)/denom); - } - } -}; - -var convolve = function(m1, m2){ - var nCols = m1.width(); - var nRows = m1.height(); - - var max = 0; - - var res = new cv.Matrix(nRows, nCols, cv.Constants.CV_32FC1); - - for(var i = 0; i < nCols; i++){ - for(var j = 0; j < nRows; j++){ - sum = 0; - - for(var i2 = i-nCols+1; i2 <= i; i2++){ - for(var j2 = j-nRows+1; j2 <= j; j2++){ - sum += m1.get(i-i2,j-j2)*m2.get(i2,j2) - if(isNaN(sum)){ - console.log(m1.get(i-i2,j-j2),m2.get(i2,j2), i-i2,i2,j-j2,j2) - throw("sum is NaN") - } - } - } - //console.log(sum) - - if(sum > max){ - max = sum - } - - res.set(i,j, sum); - } - } - //console.log(max); - - for(var i = 0; i < nCols; i++){ - for(var j = 0; j < nRows; j++){ - res.set(i,j, res.get(i,j)/max); - } - } - return res; - -}; - -var getSalient = function(channel){ - var floatInputMatrix = new cv.Matrix(); - channel.convertTo(floatInputMatrix, cv.Constants.CV_32F); - var floatAfterDct = floatInputMatrix.dct(); - - var nCols = channel.width(); - var nRows = channel.height(); - - var signs = new cv.Matrix(nRows, nCols, cv.Constants.CV_32FC1); - var arr = []; - for(var i = 0; i < nCols; i++){ - var row = []; - for(var j = 0; j < nRows; j++){ - if(floatAfterDct.get(i,j) < 0){ - signs.set(i, j, -1); - } else if(floatAfterDct.get(i,j) == 0){ - signs.set(i, j, 0); - } else { - signs.set(i, j, 1); - } - } - arr.push(row) - } - // for inverse dct, set argument to "true" - var afterDoubleDct = signs.idct(); - //console.log(afterDoubleDct.getData()) - var squaredFloat = new cv.Matrix(nRows, nCols, cv.Constants.CV_32FC1); - - for(var i = 0; i < nCols; i++){ - for(var j = 0; j < nRows; j++){ - var v = afterDoubleDct.get(i,j) - squaredFloat.set(i,j, v * v) - } - } - - var sigma = 0.3; - - var res = convolve(squaredFloat, createGaussianKernel(sigma)) - var outChannel = new cv.Matrix(nRows, nCols, cv.Constants.CV_8U); - - res.convertTo(outChannel, cv.Constants.CV_8U, 255); - - return outChannel; -}; - cv.readImage("./files/mona.png", function(err, orig) { if (err) throw err; - orig.resize(64, 64); + var chan1 = orig.split()[0]; - var channels = orig.split(); - var outChannels = []; + var floatInputMatrix = new cv.Matrix(); + chan1.convertTo(floatInputMatrix, cv.Constants.CV_32F) - for(var chanIdx = 0; chanIdx < channels.length; chanIdx++){ - outChannels.push(getSalient(channels[chanIdx])); - } + var foatAfterDct = floatInputMatrix.dct(); - var outImg = new cv.Matrix() + // for inverse dct, set argument to "true" + var afterDoubleDct = foatAfterDct.dct(true); - outImg.merge(outChannels) + var intOutImage = new cv.Matrix(); - outImg.save("./tmp/dct.png"); + afterDoubleDct.convertTo(intOutImage, cv.Constants.CV_8U); + intOutImage.save("./tmp/dct.png"); console.log('Image saved to ./tmp/dct.png'); });