Haar小波结果颜色混乱

时间:2018-12-03 14:55:27

标签: javascript opencv image-processing wavelet haar-wavelet

我尝试调整Haar小波变换的this code与OpenCV.js一起使用。递归工作正常,但结果图像的颜色都弄乱了。这是我的结果的屏幕截图: enter image description here

输出如下所示:enter image description here

这是我的代码:

function OneDHaarTransform(HaarMatrix) 
{
  var sum = 0;
  var diff = 0;
  var hMLen = HaarMatrix.length/2;
  var tempHaar = [];
  //It only recurses on first half of the array
  for (var i = 0; i < hMLen; i++) 
  {
    sum = HaarMatrix[2*i] + HaarMatrix[2*i + 1];
    sum = sum / Math.sqrt(2);
    diff = HaarMatrix[2*i] - HaarMatrix[2*i + 1];
    diff = diff / Math.sqrt(2);
    tempHaar[i] = sum;
    tempHaar[i + hMLen] = diff
  };
  for (var i = 0; i < HaarMatrix.length; i++) {
    HaarMatrix[i] = tempHaar[i];
  };
};

function haarTransform(img, MaxStepHaar) 
{
  var width = img.cols;
  var height = img.rows;
  var currWidth = width;
  var currHeight = height;
  let pix=img.clone();
  let altpix=[];
  var rowSize = width;
  var colSize = height;
  // var Haar = [];
  var Haar = createArray(height,width,3);
  var tempHaar = [];
  let dst = img.clone();

  //Initialize the Haar matrix
  for (var row = 0; row < height; row++) 
  {
    for (var col = 0; col < width; col++) {
      for (var i = 0; i < 3; i++) {
       let pixel = pix.ucharPtr(row,col);
       Haar[row][col][i] = pixel[i];
     };
   };
 };

  //Do a Haar Wavelet Transform
  while( (currWidth > 1 || currHeight > 1) && (MaxStepHaar > 1) ) 
  {
    MaxStepHaar = MaxStepHaar - 1;

      //Do it for each row first
      if (currWidth > 1) 
      {
        for(var row = 0; row < currHeight; row++)
        {
          for (var i = 0; i < 3; i++) {
            for(col = 0; col < currWidth; col++) {
              tempHaar[col] = Haar[row][col][i];
            };

            OneDHaarTransform(tempHaar);

            for(col = 0; col < currWidth; col++) {
              Haar[row][col][i] = tempHaar[col];
            };
          };
        };
      };
      //Then perform Haar transform on each column
      tempHaar = [];
      if (currHeight > 1) 
      {
        for(var col = 0; col < currWidth; col++)
        {
          for (var i = 0; i < 3; i++) {
            for(row = 0; row < currHeight; row++) {
              tempHaar[row] = Haar[row][col][i];
            };

            OneDHaarTransform(tempHaar);

            for(row = 0; row < currHeight; row++) {
              Haar[row][col][i] = tempHaar[row];
            };
          };
        };
      };
      tempHaar = [];

      if (currHeight > 1) {currHeight  = currHeight/2};
      if (currWidth > 1)  {currWidth = currWidth/2};
    };
  //Copy pix data to canvas
  for (var row = 0; row < height; row++) {
    for (var col = 0; col < width; col++) {
      pixel[0] = Haar[row][col][0];
      pixel[1] = Haar[row][col][1];
      pixel[2] = Haar[row][col][2];
      pixel[3] = 1;
    };
  };
  pix.delete();dst.delete();
};

我只更改了它,所以输入和输出将是Mat()对象。我尝试查看Mat()的最大值是否超过255,但事实并非如此。我不知道出了什么问题,请帮忙。

0 个答案:

没有答案