OpenCV降噪9像素摄像头噪音

时间:2017-07-14 07:30:23

标签: opencv image-processing

这张图片:

img

显示相机从黑色相纸拍摄的两张照片。十字架用激光标记。左边的一个显示了9像素的噪声模式

img

这妨碍了自动对焦过程。

背景: 我的老板让我把相机的自动对焦算法改进到更高的精度(比如1mm到0.01mm)。这种自动聚焦过程是激光打标的准备阶段。

原始算法使用“Sobel”计算清晰度并比较连续摄像机距离的照片清晰度,以查看哪一个对应于距离焦距最近的距离。

Sobel(im_gray, grad_x);convertScaleAbs(grad_x, abs_grad_x);
Sobel(im_gray, grad_y);convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
for (int i = 0; i < grad.rows; i++)
    for (int j = 0; j < grad.cols; j++)
       sharpness += = grad.at<unsigned char>(i, j);

该算法适用于复杂的照片(具有更高的亮度和更多的信息),尽管有噪音,但锐度值单调变化。 但对于简单的照片(亮度较低,信息较少),锐度值不会单调变化。

我首先注意到亮度方差妨碍了计算正确的清晰度,所以我使用了直方图均衡(已经尝试过“BrightnessAndContrastAuto”,而不是工作),它在一定程度上改善了结果。

equalizeHist(im_gray, im_gray);

在检查有问题的沙形值后,我意识到噪声是另一个干扰因素。因此,在直方图均衡之前,我使用尺寸为3x3和5x5的GaussianBlur进行去噪(已经尝试过“fastNlMeansDenoising”,不工作)。仍然存在有问题的锐度值(某些值打破了单调趋势)。

GaussianBlur(im_gray, im_gray, Size(5, 5), 0);

Z Pos  Sharpness 
-0.2    41.5362
-0.18   41.73
-0.16   41.9194
-0.14   42.2535
-0.12   42.4438
-0.1    42.9528
-0.08   **42.6879**
-0.06   43.4243
-0.04   43.7608
-0.02   43.9139
0       44.1061
0.02    44.3472
0.04    44.7846
0.06    44.9305
0.08    45.0761
0.1     **44.8107**
0.12    45.1979
0.14    45.7114
0.16    45.9627
0.18    46.2388
0.2     46.6344

总之,我目前的算法如下:

GaussianBlur(im_gray, im_gray, Size(5, 5), 0);
equalizeHist(im_gray, im_gray);
Sobel(im_gray, grad_x);convertScaleAbs(grad_x, abs_grad_x);
Sobel(im_gray, grad_y);convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
for (int i = 0; i < grad.rows; i++)
    for (int j = 0; j < grad.cols; j++)
       sharpness += = grad.at<unsigned char>(i, j);

问题:有人可以告诉我如何通过调整GaussianBlur的sigma或size参数或使用其他去噪算法来消除噪音吗?

附加背景:根据评论,我注意到我必须澄清我在哪里拍摄这组照片。实际上它们不是相机的原始输出。它们来自协助激光打标的软件。该软件有一个子窗口,显示摄像机的灰度实时图像。该软件具有以下功能:1。将摄像头移动到一定位置; 2.调整图像的亮度和对比度; 3.保存图像。当我拍摄一系列图像时,我首先修复亮度和对比度设置,然后连续沿Z方向移动相机,然后在每次移动后单击“保存图像”。窗口中显示的图像存储在一系列.bmp文件中。

简而言之,我捕获了由软件捕获的图像。原始图像已经通过灰度,亮度和对比度处理。一旦完成,我会将新算法添加到该软件中,然后算法的输入将是相机的原始输出。但目前我没有底层界面。我相信这种处理不会妨碍应对时变亮度和噪声。

然而,软件处理是干扰锐度算法的一个因素。它设置了“简单或硬模式”。凭借高亮度和对比度设置,只有Sobel的原始算法才能正常工作。但是,在低亮度和对比度设置下,图像显示的信息较少,时变亮度和噪声进入电源。这些是软件亮度和对比度设置的不同类型的因素,它是固定的管道。它们是图像的固有特征。换句话说,在亮度和位置设置固定的情况下,窗口中显示的图像自身在亮度和噪声方面发生变化,无论是随机还是在某个频率。因此,当我“保存图像”时,亮度和噪声变化会逐渐消失。

顶部的两张图片是在相邻的Z位置捕获的.bmp中的两张图片,相差0.02mm。我希望他们只能在清晰度上改变,但是左边的人让恶魔进入并且不愿透露真正的自我。

0 个答案:

没有答案