快速图像阈值处理

1''*_*1'' 29 opencv image-processing threshold

什么是快速可靠的阈值图像可能模糊和不均匀亮度的方法?

示例(模糊但亮度均匀):

在此输入图像描述

由于不保证图像具有均匀的亮度,因此使用固定阈值是不可行的.自适应阈值可以正常工作,但由于模糊,它会在特征中产生断裂和扭曲(这里,重要的特征是数独数字):

在此输入图像描述

我也尝试过使用直方图均衡(使用OpenCV的equalizeHist功能).它可以增加对比度而不会降低亮度差异.

我发现的最佳解决方案是将图像按其形态结束(信用到此帖子)来划分,使亮度均匀,然后重新归一化,然后使用固定阈值(使用Otsu算法选择最佳阈值水平):

在此输入图像描述

以下是OpenCV for Android中的代码:

Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(19,19));
Mat closed = new Mat(); // closed will have type CV_32F
Imgproc.morphologyEx(image, closed, Imgproc.MORPH_CLOSE, kernel);
Core.divide(image, closed, closed, 1, CvType.CV_32F);
Core.normalize(closed, image, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Imgproc.threshold(image, image, -1, 255, Imgproc.THRESH_BINARY_INV
    +Imgproc.THRESH_OTSU); 
Run Code Online (Sandbox Code Playgroud)

这很有效,但关闭操作非常慢.减小结构元素的尺寸会增加速度但会降低精度.

编辑:根据DCS的建议,我尝试使用高通滤波器.我选择了拉普拉斯滤波器,但我希望Sobel和Scharr滤波器具有相似的结果.滤波器在不包含特征的区域中拾取高频噪声,并且由于模糊而遭受与自适应阈值类似的失真.它也需要与关闭操作一样长.以下是15x15过滤器的示例:

在此输入图像描述

编辑2:根据AruniRC的回答,我使用建议的参数在图像上使用Canny边缘检测:

double mean = Core.mean(image).val[0];
Imgproc.Canny(image, image, 0.66*mean, 1.33*mean);
Run Code Online (Sandbox Code Playgroud)

我不确定如何可靠地自动微调参数以获得连接的数字.

在此输入图像描述

1''*_*1'' 21

使用Vaughn Cato和Theraot的建议,我在关闭图像之前缩小图像,然后将关闭的图像缩放到常规尺寸.我还按比例减小了内核大小.

Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(5,5));
Mat temp = new Mat(); 

Imgproc.resize(image, temp, new Size(image.cols()/4, image.rows()/4));
Imgproc.morphologyEx(temp, temp, Imgproc.MORPH_CLOSE, kernel);
Imgproc.resize(temp, temp, new Size(image.cols(), image.rows()));

Core.divide(image, temp, temp, 1, CvType.CV_32F); // temp will now have type CV_32F
Core.normalize(temp, image, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);

Imgproc.threshold(image, image, -1, 255, 
    Imgproc.THRESH_BINARY_INV+Imgproc.THRESH_OTSU);
Run Code Online (Sandbox Code Playgroud)

下图显示了3种不同方法的并排结果:

左 - 常规大小关闭(432像素),大小为19内核

中 - 半尺寸关闭(216像素),9号内核

右 - 四分之一大小关闭(108像素),大小为5内核

在此输入图像描述

随着用于关闭的图像的尺寸变小,图像质量劣化,但是劣化不足以影响特征识别算法.即使调整大小,四分之一大小的关闭速度也会略微增加16倍以上,这表明关闭时间大致与图像中的像素数成正比.

关于如何进一步改进这一想法的任何建议(通过进一步降低速度或降低图像质量的恶化)都是非常受欢迎的.