问题

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

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

enter image description here

由于图像不能保证亮度均匀,使用固定阈值是不可行的.自适应阈值工作正常,但由于模糊,它在功能中创建了断裂和扭曲(这里,重要功能是数独数字):

enter image description here

我也尝试过使用Histogram Emendia(使用OpenCV的equalizeHist函数).它增加对比而不减少亮度的差异.

我找到的最好的解决方案是通过形态闭合(信用此帖子)来划分图像,使亮度统一,然后重整,然后使用固定阈值(使用Otsu的算法来选择最佳阈值水平):

enter image description here

这是Android的OpenCV中的代码:

 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); 
 

这很好,但关闭操作非常慢.降低结构元素的大小增加了速度,但降低了精度.

编辑:根据DCS的建议,我尝试使用高通滤波器.我选择了Laplacian过滤器,但我希望使用Sobel和Scharr过滤器得到类似的结果.过滤器在不包含特性的区域中找到高频噪声,并由于模糊而遭受类似于自适应阈值的扭曲.结束操作也需要大约一段时间.这是一个带有15x15过滤器的示例:

enter image description here

编辑2:基于AruniRC的答案,我在图像上使用Canny边缘检测与建议的参数:

 double mean = Core.mean(image).val[0];
Imgproc.Canny(image, image, 0.66*mean, 1.33*mean);
 

我不知道如何可靠地自动调整参数以获取连接数字.

enter image description here

  最佳答案

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

 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);
 

下面的图像显示了3种不同方法的侧面结果:

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

中半尺寸关闭(216像素),大小9内核

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

enter image description here

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

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

  相同标签的其他问题

opencvimage-processingthreshold