【问题标题】:opencv.js Otsu thresholdopencv.js 大津阈值
【发布时间】:2018-10-19 00:36:10
【问题描述】:

我正在使用 opencv.js。

我正在尝试找到对从手机拍摄的图像实施二进制过滤器的最佳方法,以便清楚地看到图像上的文字。自适应阈值不是很好 - 噪音太大。我正在尝试使 Otsu 阈值起作用,但我失败了。

tutorials in the other OpenCV docs 看来,您最好先进行高斯模糊,然后再进行 Otsu 阈值(将 0 作为阈值传入)。

对于阈值,只需传递零。然后算法找到最佳阈值并将您作为第二个输出返回,retVal

当我使用 0 作为阈值时,我得到一个全白的结果。如果我传入一些合理的值(例如 128),我会得到一个不错的结果,但图像的一些较暗区域会被洗掉。我怎样才能让这个“最佳阈值”(通过零)为 opencv.js 工作?

let src = cv.imread('canvasInput');
let dst = new cv.Mat();
let ksize = new cv.Size(3, 3);

//Blur & conver to gray
cv.GaussianBlur(src, dst, ksize, 0);
cv.cvtColor(dst, dst, cv.COLOR_BGR2GRAY, 0);


/* PROBLEM HERE: 
*    passing 0 returns all white, passing 128 is a reasonable result
*/
cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY&cv.THRESH_OTSU);
cv.imshow('canvasOutput', dst);

【问题讨论】:

    标签: javascript opencv computer-vision


    【解决方案1】:

    问题出在这一行

    cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY&cv.THRESH_OTSU);
    

    由于 cv.THRESH_BINARY & cv.THRESH_OTSU = 0,

    你真的这样做了

    cv.threshold(dst, dst, 0, 255, 0);   <===== 0 = cv.THRESH_BINARY
    

    要将一个标志附加到另一个标志应该使用“OR”运算符。

    所以这行应该改为

    cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
    

    【讨论】:

      【解决方案2】:

      如果图像的内容多于文本,则全局阈值方法(如 Otsu)将失败。

      保持您的自适应阈值,但在阈值上添加一个小的正或负常数。

      【讨论】:

      • “它会失败”是什么意思?你的意思是它不会表现得很好? Otsu 文档并没有提到只有文字。自适应阈值需要根据拍摄的照片而变化的常数,无论如何它似乎都会添加椒盐噪声。这就是为什么当我在 Otsu 文档中看到以下内容时充满希望的原因:“对于阈值,只需传递零。然后算法找到最佳阈值并将您作为第二个输出 retVal 返回。”。但要么我用错了,要么在 OpenCV.js 中不起作用。
      • @BRass:它可以计算一个不相关的阈值。
      【解决方案3】:

      没有自动获得“最佳阈值”的方法。

      但您可以尝试使用Adaptive Threshold,我认为CLAHE 可能有助于解决阈值问题。

      【讨论】:

      • 谢谢。我使用了高斯方法的自适应阈值。确实不错,但最终会产生椒盐噪声。您注意到没有获得最佳阈值的自动方法。知道为什么 opencv 文档在下面为 OTSU 说明了吗? “对于阈值,只需传递零。然后算法会找到最佳阈值并将您作为第二个输出 retVal 返回。” docs.opencv.org/3.4.0/d7/d4d/tutorial_py_thresholding.html
      • @BRass OTSU 方法适用于图像区域。可以找到“最佳”值,但对于人类看到的整个图像而言,它不能是“好”值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多