我需要在某些图像中应用二值化过程。到目前为止,我只测试了OpenCV中的三种阈值技术(Otsu,自适应和固定),自适应是得到了更好的结果,但仍然没有预期的好。我想知道一个从事图像处理的人,有些建议我可以做一些测试。我做了一个搜索,找到了很多方法,甚至很多,很多,我不知道从哪里开始。所以,在这里,我要求那些理解这个主题的人提出建议。
图像示例:
答案 0 :(得分:2)
以下步骤给了我最好的结果:
提取图像的绿/蓝通道。\
vector< Mat > channels(3);
split(frame, channels);
应用高斯模糊。
GaussianBlur(channels[0], channels[0], Size(7, 7), 0, 0);
使用THRESH_OTSU标志应用阈值。
threshold(channels[0], channels[0], -1, 255, THRESH_BINARY+THRESH_OTSU);
另请参阅关于阈值处理的这些帖子:Adaptive threshold of blurry image和Threshold of blurry image - part 2
答案 1 :(得分:1)
我通常从一些简单的阈值开始:
1)平均强度
2)中位数强度
3)强度的平均值+ k *标准偏差(以k = 1开始)
4)中位数+ k * median absolute deviation
只有当简单的阈值不起作用时,我才会考虑更复杂的阈值,例如自适应阈值。
答案 2 :(得分:0)
你可以尝试
更简单的选择是使用最亮区域作为起始区段来执行均值过滤。
答案 3 :(得分:0)
数字的位置似乎是固定的,以及它们的形状和边界矩形的比例。您可以将图像分割为多个区域并单独处理,等待黑色背景上的白色数字或红色背景上的灰色数字,或类似的特定内容。
答案 4 :(得分:-1)
我会在这些基本步骤中执行此操作:
这些步骤只是我将从哪里开始的简要说明。反思将是一个难以解决的问题我想(我正在研究的东西现在有部分阴影,这是一个类似的问题)。
如果这看起来非常复杂,那么就无法取代一本好的图像处理书和大量的编程实践。
希望这有帮助!