我有一堆质量低,对比度低(通常也是光线不好)的照片,写在岩石上。我希望我的程序能够检测字母形状(通常很破旧)。由于我是新手,因此我尝试使用sobel / laplacian / canny滤镜,但是照片显然需要进行一些预处理。您能否建议我可以做些什么以获得更好的结果。我尝试在线搜索,但发现的解决方案不起作用或听起来像魔术一样。
答案 0 :(得分:-1)
此问题需要完整的算法。缺少使用OpenCV 在 MATLAB / Octave 或 Python / C ++中编写完整代码的方法,这是我的两分钱,我可能会如何解决。
该图像中的文字被边缘/刻入岩石中。我希望首先通过某种直方图均衡化来增强图像的对比度。这应该使文本更加突出。 (提示:在opencv中检出calcHist()
和equalizeHist()
,或在MATLAB中检出imhist()
和adapthisteq()
。)
我会去掉图像中不必要的部分。
去除所有不是石头的东西。
这应该使您得到裁剪后的图像,接近此图像。 (提示:请参见here中所述的cv2.HoughLines
或here中所述的houghlines
在Matlab上。)
接下来,我将去除岩石右下角周围的那些尖锐边缘。我认为这可以通过以下两种方式之一来完成。
fft()
函数,也可以采用opencv中的cv2.idft
并将图像变换到频域,并删除高于某个频率阈值的所有频率分量。 (该阈值是什么,我不能说。必须测试一下才能看到。请注意不要将阈值设置得太低,否则也可能失去文本的清晰度。)。从频域变回已修改的图像。 imgausfilt
或opencv中的cv2.filter2D
来模糊图像。与这些功能一起使用的过滤器/内核的大小很重要。太大,会丢失太多细节。现在,删除了图像“无趣”部分的大部分内容后,您可以在阈值黑白图像上应用一些边缘检测算法(例如,Canny,正如您所提到的那样),希望您应该有更多的文本。 OpenCV和MATLAB中都存在等效的边缘检测功能。
待办事项:当然,文本之间的小圆圈仍然是一个问题,可以对算法进行优化(例如,匹配圆形等形状),然后将其删除。另外,如何从该图像中重建文本的受损部分可能更具挑战性(至少对我而言)。