Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【短道速滑十】从单幅图像中评估加性噪音的均方差。

【短道速滑十】从单幅图像中评估加性噪音的均方差。

作者头像
用户1138785
发布于 2023-01-05 07:49:37
发布于 2023-01-05 07:49:37
57800
代码可运行
举报
运行总次数:0
代码可运行

  在Halcon中有这样一个函数:

  estimate_noise estimate_noise — Estimate the image noise from a single image.

 Signature

    estimate_noise(Image : : Method, Percent : Sigma)

Description

  The operator estimate_noise estimates the standard deviation of additive noise within the domain of the image that is passed in Image. The standard deviation is returned in Sigma.

    The operator is useful in the following use cases:

    determination of MinContrast for matching,

    determination of the amplitude for edge filters,

    camera evaluation,

    monitoring errors in camera operation (e.g., user overdrives camera gain).

  即从单幅图像中评估图像噪音的均方差,这个算子可以用于计算匹配时的最小对比度(发现新大陆了,原路模板匹配还可以用这个做自动化)、边缘检测滤波器的幅度、摄像机评估、控相机操作中的错误(例如用户过度调节相机增益)。

       我觉得还可以把他作为自动去噪的一个参考指标。

  Halcon里提供了四个评估噪音的方法:: 'foerstner', 'immerkaer', 'least_squares', 'mean',其本身最推荐的方法是immerkaer,如其帮助文档里所说:

  Use the method 'immerkaer', instead of the methods 'foerstner', 'least_squares', or 'mean'. The method 'immerkaer' does not rely on the existence of homogeneous image regions, and hence is almost always applicable.

  关于immerkaer方法,开放的Halcon基本上提供了完整的算法思路:

    'immerkaer': If Method is set to 'immerkaer', first the following filter mask is applied to the input image:  

    The advantage of this method is that M is almost insensitive to image structure but only depends on the noise in the image. Assuming a Gaussian distributed noise, its standard deviation is finally obtained as

            where N is the number of image pixels to which M is applied. Note that the result obtained by this method is independent of the value passed in Percent.

  这个M算子明显就是类似一个边缘检测的算子,然后把所有这个算子的结果相加,再求某个意义下的平均值,Halcon说这个方法的好处是对图像的结构不敏感,而只完全依赖于图像的噪音本身。 

  我想有了这个提示,要实现这个功能应该就是很简单的过程了。 

  我的一个实现如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//    模拟实现halcon的estimate_noise函数

int IM_EstimateNoise(unsigned char *Src, int Width, int Height, int Stride, float &Sigma)
{
    int Channel = Stride / Width;
    if (Src == NULL)                                return IM_STATUS_NULLREFRENCE;
    if ((Width <= 0) || (Height <= 0))                return IM_STATUS_INVALIDPARAMETER;
    if (Channel != 1)                                return IM_STATUS_NOTSUPPORTED;
    unsigned int Sum = 0;
    for (int Y = 1; Y < Height - 1; Y++)
    {
        unsigned char *LinePL = Src + (Y - 1) * Stride;
        unsigned char *LinePC = Src + (Y - 0) * Stride;
        unsigned char *LinePN = Src + (Y + 1) * Stride;
        for (int X = 1; X < Width - 1; X++)
        {
            int L = LinePL[X - 1] - 2 * LinePL[X] + LinePL[X + 1];
            int C = -2 * LinePC[X - 1] + 4 * LinePC[X] - 2 * LinePC[X + 1];
            int N = LinePN[X - 1] - 2 * LinePN[X] + LinePN[X + 1];
            Sum += IM_Abs(L + C + N);
        }
    }
    Sigma = sqrtf(IM_PI / 2) / (6 * Width * Height) * Sum;
    return IM_STATUS_OK;
}

  为了简化代码,没有考虑图像周边单位像素的信息了,如果要严格意义的实现,也应该不是很难吧。 

  我们比较下halcon的结果和上面这段代码的结果,使用Halcon自带的测试代码和图片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
TestImages := ['for6','pumpe','die/die_02','clip','ic0','horses','board/board-01','combine']
NumImages := |TestImages|
for I := 0 to NumImages - 1 by 1
    read_image (Image, TestImages[I])
    dev_resize_window_fit_image (Image, 0, 0, -1, -1)
    dev_display (Image)
    for AddedNoise := 0 to 15 by 5
        gauss_distribution (AddedNoise + 1e-2, Distribution)
        add_noise_distribution (Image, ImageNoise, Distribution)
        write_image (ImageNoise, 'bmp', 0, 'C:/Users/Administrator/Desktop/1.bmp')
        estimate_noise (ImageNoise, 'foerstner', 20, SigmaFoerstner)
        estimate_noise (ImageNoise, 'immerkaer', 20, SigmaImmerkaer)
        estimate_noise (ImageNoise, 'least_squares', 20, SigmaLeastSquares)
        estimate_noise (ImageNoise, 'mean', 20, SigmaMean)
        dev_display (ImageNoise)
        disp_message (WindowHandle, 'Added Gaussian noise: Sigma = ' + AddedNoise, 'window', 12, 12, 'black', 'true')
        Message := 'Estimated image noise (Sigma):'
        Message[1] := 'Method \'foerstner\':     ' + SigmaFoerstner$'5.2f'
        Message[2] := 'Method \'immerkaer\':     ' + SigmaImmerkaer$'5.2f'
        Message[3] := 'Method \'least_squares\': ' + SigmaLeastSquares$'5.2f'
        Message[4] := 'Method \'mean\':          ' + SigmaMean$'5.2f'
        disp_message (WindowHandle, Message, 'windowe', 40, 12, 'black', 'true')
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endfor
endfor  

               噪音图像                                          Halcon的结果

  使用上述C的代码获取的结果为: 5.240565,和Halcon的结果基本一致。

 我们再找一些正常的图片看看这个噪音值是否合理:

          噪音值 0.7763                                    噪音值 2.6604

  基本啥都比较小。 

                            噪音值  7.2155                                             噪音值  20.04

  对于高斯噪音,如上所示,还是能明显的区别出来的。

  不过测试也表面,有些图的噪音虽然视觉看起来比较明显,但是用这参数去衡量时,确是很小,这个可能是因为他针对的是加性噪音做的评估吧。

  参考资料:

    W. Förstner: “Image Preprocessing for Feature Extraction in Digital Intensity, Color and Range Images“, Springer Lecture Notes on Earth Sciences, Summer School on Data Analysis and the Statistical Foundations of Geomatics, 1999     J. Immerkaer: “Fast Noise Variance Estimation“, Computer Vision and Image Understanding, Vol. 64, No. 2, pp. 300-302, 1996

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《Understanding Deep Learning》书摘
豆瓣:https://book.douban.com/subject/36395283/
AlphaHinex
2025/01/19
640
《Understanding Deep Learning》书摘
基于LBPH的人脸识别
彩色图像单个像素是(R, G, B),转换成灰度图就是简化矩阵, 提高运算速度 比如一个点,灰度的话,就256个维度而已,但是如果算上RGB色彩的话,那就是1600万以上维度。然后再相互组合,或者说找梯度,可以想象 计算量非常大,于是就先降维(灰度)来计算.
CaesarChang张旭
2021/01/26
5810
基于LBPH的人脸识别
10分钟小白都可以看懂的光度立体法以及运用到项目
利用三幅光度立体图像来恢复物体表面3D模型的快速算法,根据向量场的分布建立关于物体表面深度信息的超定线性方程组,在最小二乘意义下求得物体表面的深度值.该算法能从已知光照条件下的三幅光度立体图像中恢复任意没有遮挡面物体表面的三维结构,形成以单个像素为网格精度的物体表面的多面体模型.实际计算表明该算法计算速度快,能适应任意连续性的物体表面的3D模型重建并且不受其表面反射系数的影响。 采用不同光照条件下拍摄的多幅图像,利用光度立体技术对织物表面进行3D重建.首先根据物体表面的照度方程,引入广义逆的概念求解物体表面方向进而确定表面梯度,再运用线积分计算表面高度,结合变分和有限差分思想对所得拟合表面进行进一步的迭代和修正,获得最佳重建表面.将该算法运用到AATCC织物平整度模板图像的三维重建,可获取三维深度信息,并结合4个特征值表征织物起皱程度.。 改进光度立体视觉方法,尤其适用于表面检测 在工业领域,表面检测是一个非常广泛的应用领域。使用HALCON 11中增强的光度 立体视觉 方法,三维表面检测被加强。利用阴影可方便快速的检测物体表面的缺口或凹痕。
苏州程序大白
2021/08/13
4.6K0
10分钟小白都可以看懂的光度立体法以及运用到项目
【相机标定篇】halcon自标定(3)
在项目中,偶尔会遇到由于产品形状、拍摄位置等原因导致标定板很难放置的情况,此时可以考虑使用halcon自标定算法来标定相机。由于自标定可以在不使用用标定板情况下,进行畸变矫正。所以,极大地方便在设备现场进行调试。
threeQing
2019/06/03
7.1K0
【相机标定篇】halcon自标定(3)
Halcon—Realsense相机标定+手眼标定[通俗易懂]
使用软件:Halcon18.05(默认安装好任一版halcon) 使用设备:Intel Realsense 435+AUBO机械臂 完成功能:相机标定、eye-in-hand手眼标定
全栈程序员站长
2022/09/06
4.1K0
Halcon—Realsense相机标定+手眼标定[通俗易懂]
激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 模型三维重建
原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html
徐飞机
2019/09/23
3.1K0
激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 模型三维重建
【测量篇】(4)2D测量(计量)
2D测量,顾名思义,是在两个方向的测量即x、y(行、列)方向,最常见是直线、圆、椭圆的相关几何参数测量,其测量流程与1D测量类似的。
threeQing
2019/07/28
2.6K0
【测量篇】(1)1D测量
清朝三百年,将国人的奴性打磨的根深蒂固,伟人毛主席将反抗的火种播撒至每个人的心中,随着经济的高速发展,一些资产违背国家意愿,逐渐形成联盟,劳动力阶级一定要摆脱轮回的宿命。
threeQing
2019/06/03
2.8K0
【测量篇】(1)1D测量
【愚公系列】2023年04月 Halcon机器视觉-15种常用缺陷检测实例
缺陷检测是一种通过计算机视觉技术来检测产品制造过程中的缺陷的方法。该技术可以检测出产品表面的缺陷,如裂纹、凹陷、划痕、气泡等,并且可以实时监测和诊断制造过程中的问题。在制造业中,机器视觉缺陷检测技术已经被广泛应用于各种产品的质量控制和检测工作中,如电子产品、汽车零部件、医疗器械等。
愚公搬代码
2023/04/04
2.5K0
【愚公系列】2023年04月 Halcon机器视觉-15种常用缺陷检测实例
halcon标定后畸变校正与测量
这是一个很久以前的微博网友写的,现在的halcon运行有问题,因为已经没有parameters_image_to_world_plane_centered这个函数了,知道现在版本替换它的函数的朋友麻烦告知一下,万分感谢
vv彭
2020/10/30
2K0
Halcon实例转OpenCV之焊点检测
Halcon例程中有一个焊点检测例程ball.hdev,大家可以在例程中搜索查看,如下是实例使用的测试图和运行结果图:
Color Space
2020/11/25
1.2K0
Halcon实例转OpenCV之焊点检测
实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)
本文主要介绍一个复杂背景下OCR数字提取识别实例,并将Halcon实现转为OpenCV。
Color Space
2021/10/09
2.2K0
实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)
【愚公系列】2023年04月 Halcon机器视觉-WPF中使用Halcon进行联合编程
Halcon是一种计算机视觉软件工具,用于图像处理、分析和机器视觉应用。它由德国MVTec公司开发,是一种功能强大的视觉软件工具,可用于解决各种计算机视觉问题,包括目标检测、图像识别、三维视觉等。Halcon支持多种编程语言,包括C++、C#、Python等,用户可以使用自己熟悉的编程语言进行开发和应用。
愚公搬代码
2023/04/06
4.2K0
【愚公系列】2023年04月 Halcon机器视觉-WPF中使用Halcon进行联合编程
限制对比度自适应直方图均衡化算法原理、实现及效果
一、自适应直方图均衡化(Adaptive histgram equalization/AHE)
用户1138785
2019/09/11
5K0
限制对比度自适应直方图均衡化算法原理、实现及效果
【沥血整理】灰度(二值)图像重构算法及其应用(morphological reconstruction)。
        不记得是怎么接触并最终研究这个课题的了,认识我的人都知道我是没有固定的研究对象的,一切看运气和当时的兴趣。本来研究完了就放在那里了,一直比较懒的去做总结,但是想一想似乎在网络上就没有看到关于这个方面的资料,能搜索到的都是一些关于matlab相关函数的应用,决定还是抽空趁自己对这个算法还有点记忆的时候写点东西吧,毕竟这个算法还有一些应用是值得回味和研究的。而且也具有一定的工程价值。
用户1138785
2022/09/21
1K0
【沥血整理】灰度(二值)图像重构算法及其应用(morphological reconstruction)。
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
本文给大家分享一个电感元件定位实例,并附Halcon和OpenCV实现步骤和代码。
Color Space
2022/04/06
1K0
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。      在1979年Lee发表的论文《Lee Filter Digital Image Enhancement and Noise
该文就目前技术社区中比较流行的图像磨皮算法的实现进行介绍,分析了其原理、效果以及优缺点,并给出了基于深度学习的图像磨皮算法的实现流程。
用户1138785
2018/01/03
1.6K0
基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用。
	     在1979年Lee发表的论文《Lee Filter Digital Image Enhancement and Noise
统计学学术速递[12.9]
【1】 Optimistic Rates: A Unifying Theory for Interpolation Learning and Regularization in Linear Regression 标题:乐观率:线性回归中插值学习和正则化的统一理论 链接:https://arxiv.org/abs/2112.04470
公众号-arXiv每日学术速递
2021/12/09
5780
图像处理-评价指标-PSNR峰值信噪比和SSIM结构相似度
psnr是“Peak Signal to Noise Ratio”的缩写,即峰值信噪比,是一种评价图像的客观标准。 为了衡量经过处理后的影像品质,我们通常会参考 PSNR值来衡量某个处理程序能否令人满意。PSNR的单位是dB,数值越大表示失真越小。n为每像素的比特数,一般的灰度图像取8,即像素灰阶数为256。它是原图像与被处理图像之间的均方误差相对于 (2n-1)2的对数值(信号最大值的平方,n是每个采样值的比特数),所以PSNR值越大,就代表失真越少。 MATLAB用法的公式如下:
AomanHao
2022/01/14
6.1K0
图像处理-评价指标-PSNR峰值信噪比和SSIM结构相似度
统计学学术速递[9.8]
【1】 Estimating effects within nonlinear autoregressive models: a case study on the impact of child access prevention laws on firearm mortality 标题:估计非线性自回归模型的效应:儿童接触防护法对枪支死亡率影响的案例研究 链接:https://arxiv.org/abs/2109.03225
公众号-arXiv每日学术速递
2021/09/16
4410
推荐阅读
相关推荐
《Understanding Deep Learning》书摘
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验