Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 用于边缘检测的图像预处理-低质量、低对比度_Image Processing_Edge Detection_Image Preprocessing - Fatal编程技术网

Image processing 用于边缘检测的图像预处理-低质量、低对比度

Image processing 用于边缘检测的图像预处理-低质量、低对比度,image-processing,edge-detection,image-preprocessing,Image Processing,Edge Detection,Image Preprocessing,我有一堆低质量、低对比度的照片,通常也有不好的光照岩石上的文字。我想我的程序来检测字母形状,这通常是相当磨损。因为我是一个新手,我尝试应用sobel/laplacian/canny过滤器,但照片显然需要一些预处理。你能建议我怎样做才能得到更好的结果吗。我试着在网上搜索,但我找到的解决方案要么不起作用,要么听起来像魔术 这个问题需要一个完整的算法。除了使用OpenCV在MATLAB/Octave或Python/C++中编写完整的代码外,下面是我的两分钱,我想告诉大家我将如何做 那张图像中的文字是刻

我有一堆低质量、低对比度的照片,通常也有不好的光照岩石上的文字。我想我的程序来检测字母形状,这通常是相当磨损。因为我是一个新手,我尝试应用sobel/laplacian/canny过滤器,但照片显然需要一些预处理。你能建议我怎样做才能得到更好的结果吗。我试着在网上搜索,但我找到的解决方案要么不起作用,要么听起来像魔术


这个问题需要一个完整的算法。除了使用OpenCV在MATLAB/Octave或Python/C++中编写完整的代码外,下面是我的两分钱,我想告诉大家我将如何做

那张图像中的文字是刻在岩石上的。我希望首先通过某种直方图均衡化来增强图像的对比度。这将使文本更加突出。提示:在中查看calcHist和equalizeHist,或在中查看imhist和AdapteHistEq

我将着手删除图像中不必要的部分

除去所有不是岩石的东西

因为这一个会移除一切不是岩石的东西。这意味着,移除靠近顶部的部分图像,这部分图像通常较暗。您可以对图像执行黑白阈值处理,然后应用Hough变换来检测图像中最大的水平线或接近水平的线。 以类似的方式,我会尝试在45°的角度检测岩石边缘。 使用删除这两条线以上的所有内容。 这会给你留下一个裁剪过的图像,类似于这个。提示:请参见cv2.HoughLines的说明或Matlab上的HoughLines的说明

这就是我的意思

接下来,我将移除岩石右下角的锐利边缘。在我看来,这可以通过以下两种方式之一实现

这些边看起来很细很锋利。也就是说,高频分量。实际上,这些似乎是整个图像中的最高频率分量。因此,您可以从或cv2.idft中获取fft函数,并将图像转换到频域中,然后删除高于某个频率阈值的所有频率分量。这个门槛是什么,我不能说。我们必须测试和观察。注意不要将阈值设置得太低,否则也可能会丢失文本的清晰度。。将修改后的图像从频域变换回来。 或者,更简单地说,您可以使用imgausfilt from或cv2.filter2D from模糊图像。与这些函数一起使用的过滤器/内核的大小很重要。太大,你会失去太多的细节。 这将使底部的锐边变得平滑。注意:该图像仅用于图示目的。平滑当然会影响整个图像。因此,最好将平滑度降低到与删除这些细边相同的程度,以便在边缘检测步骤中不会出现这些细边。 现在,随着图像中大部分“无趣”部分的删除,您可以应用一些边缘检测算法,例如Canny,正如您在阈值黑白图像中提到的,希望您可以有更多的文本。OpenCV和MATLAB中都存在用于边缘检测的等效函数

TODO:当然,文本之间的小圆圈仍然是一个问题,例如,可以改进算法以匹配圆形等形状,然后将其删除。另外,至少对我来说,如何从这幅图像中重建文本的受损部分可能更具挑战性

最后,您可以使用一些OCR识别,例如使用tesseract,您可以尝试从处理过的图像中提取文本。
用已知的过滤技术,恐怕这项任务实际上是不可能的。有些地方的刻划非常模糊,有许多令人不安的元素——孔洞、划痕、裂缝、随机照明。。。。即使是未经培训的人也无法产生可利用的结果。我使用RTI成像处理类似的任务,请参见示例。不幸的是,我当然意识到这对您没有直接帮助。@Karolina正如其他人所建议的,您的检测结果只会和您的数据一样好。您可以尝试一些图像处理技术,但对于漂白/过度曝光的区域,您不会有太大的进展,而且自动化起来感觉很困难。我也会尽你的视觉所能手动追踪字母,也许想想什么样的图像特征可以让你追踪字符?OCR会失败得很惨。@YvesDaoust,单凭它自己,是的,OCR不会取得太大的成就。我说的是在步骤1、2和3之后,在处理过的图像上使用OCR。这也是我的意思。在预处理之后,OCR将继续失败。那么你的建议是什么来解决这个问题呢?承认这是不可行的。