Уменьшить шум при обнаружении линий с веб-камеры - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь внедрить онлайн-сканер документов, который автоматически распознает его края и делает снимок, когда площадь прямоугольника достаточно велика. Я реализовал следующий конвейер в opencvjs:

  // Grayscale image
  var imgray = new cv.Mat();  
  cv.cvtColor(srcMat, imgray, cv.COLOR_RGBA2GRAY, 0);
  // Blurring
  let blurred = new cv.Mat();
  let ksize = new cv.Size(7, 7);  
  cv.GaussianBlur(imgray, blurred, ksize, 0, 0, cv.BORDER_DEFAULT);
  // Canny
  var canny = new cv.Mat(); 
  low_threshold = 50;
  high_threshold = 100;
  cv.Canny(blurred, canny, 50, 150, 3, false);

  // Hough
  rho = 1  // distance resolution in pixels of the Hough grid
  theta = Math.PI / 180  // angular resolution in radians of the Hough grid
  threshold = 2  // minimum number of votes (intersections in Hough grid cell)
  min_line_length = 100  // minimum number of pixels making up a line
  max_line_gap = 10  // maximum gap in pixels between connectable line segments
  let lines = new cv.Mat();

  // Run Hough on edge detected image
  // Output "lines" is an array containing endpoints of detected line segments  
  cv.HoughLinesP(canny, lines, rho, theta, threshold, min_line_length, max_line_gap);

  // draw lines
  for (let i = 0; i < lines.rows; ++i) {
    let startPoint = new cv.Point(lines.data32S[i * 4], lines.data32S[i * 4 + 1]);
    let endPoint = new cv.Point(lines.data32S[i * 4 + 2], lines.data32S[i * 4 + 3]);
    cv.line(canny, startPoint, endPoint, new cv.Scalar(255, 255, 255, 0), 5);
  }
  document.getElementById("lines").textContent=lines.rows;  
  imgray.delete();
  blurred.delete();
  lines.delete();
  return canny;

Результат - то, что вы видите на видео: enter image description here

Проблема в том, что, хотя обработанные Canny края достаточно "стабильны", линии, обнаруженные HoughLinesP, постоянно меняют положение, и их нелегко отслеживать. Где я не прав? Можете ли вы предложить некоторые улучшения для этого конвейера?

...