【发布时间】:2011-09-10 15:19:18
【问题描述】:
我正在抑制离散余弦变换 (DCT) 域中图像中几个(不相等)块的低 DC 频率。之后进行逆 DCT 以取回仅保留高频部分的图像。
cvConvertScale( img , img_32 ); //8bit to 32bit conversion
cvMinMaxLoc( img_32, &Min, &Max );
cvScale( img_32 , img_32 , 1.0/Max ); //quantization for 32bit
cvDCT( img_32 , img_dct , CV_DXT_FORWARD ); //DCT
//display( img_dct, "DCT");
cvSet2D(img_dct, 0, 0, cvScalar(0)); //suppress constant background
//cvConvertScale( img_dct, img_dct, -1, 255 ); //invert colors
cvDCT( img_dct , img_out , CV_DXT_INVERSE ); //IDCT
//display(img_out, "IDCT");
目标是从图像中先前检测到的区域中识别和隔离高频元素。然而,在某些情况下,文本非常薄且微弱(低对比度)。在这些情况下,IDCT 产生的图像非常暗,以至于即使是高频部分也变得太微弱,无法进行进一步的分析。
有哪些操作可以让我们在背景抑制后从 IDCT 中获得更清晰的图像? CvEqualizeHist() 噪音太大。
编辑:
Whole picture 按照贝利撒留的要求上传到这里。低频抑制不是在整个图像上进行,而是在设置为围绕文本/低频部分的最小边界矩形的小 ROI 上进行。
【问题讨论】:
-
将 DCT 系数
(0, 0)设置为零不会消除任何噪音。它只会用一个常数减去整个图像的灰度级(这是原始图像的平均灰度级)。新图像将包含与原始图像一样多的高频噪声。 -
在你截图的三个测试样本中,我认为一个简单的阈值应该能够将文本与背景分开。您可能想看看二进制阈值算法。
-
@Nick ODell:不,它们不是验证码。只是从非常混乱的低质量街景中检测到的印度文字。
-
@rwong - 主要目的不是最初消除噪音,而是首先尝试消除恒定的背景。我尝试了 Otsu 的阈值以及局部自适应,但它并没有真正奏效。你能给出任何你认为可能有用的具体参考吗?此外,如果您可以提供有助于解决高频噪声的代码/算法,同时抑制恒定背景(后来我已经这样做了),那就太好了。
-
隔离高频的目标是什么?也许还有其他方法可以实现。
标签: image-processing opencv computer-vision