IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> NLM_P-Parameter-Free Fast Pixelwise Non-Local Means Denoising分享 -> 正文阅读

[人工智能]NLM_P-Parameter-Free Fast Pixelwise Non-Local Means Denoising分享

论文名称:Parameter-Free Fast Pixelwise Non-Local Means Denoising

论文下载:IPOL Journal · Parameter-Free Fast Pixelwise Non-Local Means Denoisinghttps://www.ipol.im/pub/art/2014/120/

????????之前分享了一篇是块级别的NLM denoising?(NLM_B),这篇基于像素级的NLM denoising(NLM_P),主要有两种NLM_Pa和NLM_P。差别在于计算块间距离时,NLM_Pa使用的是Gaussian Euclidean norm,而NLM_P使用的是Euclidean norm。当然,和NLM_B不同的是,计算权重时,没有减2*sigma^2了,应该是原论文也没减,是《Non-Local Means Denoising》里减的IPOL Journal · Non-Local Means Denoising

接下来介绍了基本算法的计算伪代码,并分析了计算复杂度,为后面优化做铺垫。

???????

?

????????介绍了几种优化方法,针对NLM_P,由于其特殊性,可以使用积分图进行优化,复杂度可以减低,还介绍了基于傅里叶变换的优化,但图像较大时,计算复杂度就很高了,最后就是文章的重点方法SIL,计算复杂度可以降。OpenCV里的NLM系列函数(fastNlMeansDenoisingColored)应该就是参考这个方法。

?

?

?

?

? ? ? ? 由于参数和噪声强度有关,文章分析了下怎么设置最优的参数。?通过构造了两个数据集,以PSNR为标准,得到最优的参数。

最后分析对比了NLM_P和NLM_B的效果,从PSNR数据上看,NLM基本上是优于NLM-P/NLM-Pa,但主观效果是相当的?(感觉有点耍流氓)。

????????论文公开了C代码(IPOL Journal · Parameter-Free Fast Pixelwise Non-Local Means Denoising),只有SIL那种方法,没有仔细研究了,如果实际会使用该算法的话,再来细看,如果只是看效果的话,可以调用OpenCV里的函数即可。

? ? ? ? 另外,对于基础算法流程,用Python代码简单写了单通道的(计算权重那一步应该可以提前计算为表,之后查表就行),可以作为参考,根据这个可以扩展为彩色图像的,Python代码会很慢,代码参考了这篇博文非局部均值滤波-A non-local algorithm for image denoising_Nick Blog-CSDN博客1. 简介Non-Local Means顾名思义,这是一种非局部平均算法。何为局部平均滤波算法呢?那是在一个目标像素周围区域平滑取均值的方法,所以非局部均值滤波就意味着它使用图像中的所有像素,这些像素根据某种相似度进行加权平均。滤波后图像清晰度高,而且不丢失细节。2. 原理该算法使用自然图像中普遍存在的冗余信息来去噪声。与双线性滤波、中值滤波等利用图像局部信息来滤波不同,它利用了整幅图像进行去噪。即以图像块为单位在图像中寻找相似区域,再对这些区域进行加权平均平均,较好地滤除图像中的高斯噪声。2.1https://niecongchong.blog.csdn.net/article/details/111304042

def GaussianKernel(d, sigma):
    # Generate array
    ax = np.arange(-d // 2 + 1., d // 2 + 1.)
    # Generate 2D matrices by duplicating ax along two axes
    xx, yy = np.meshgrid(ax, ax)
    # kernel will be the gaussian over the 2D arrays
    kernel = np.exp(-(xx**2 + yy**2) / (2. * sigma**2))
    # Normalise the kernel
    final = kernel / kernel.sum()
    return final


def onLocalMeansGray_NLMP(image, h=10, templateWindowSize=7, searchWindow=21):
    height, width = image.shape[0], image.shape[1]
    patchWin = int(templateWindowSize / 2)
    searchWind = int(searchWindow / 2)

    # Padding the image
    padLength = patchWin + searchWind
    img = cv2.copyMakeBorder(image, padLength, padLength, padLength, padLength, cv2.BORDER_CONSTANT, value=255)

    # output image
    outImage = np.zeros((height, width), dtype='float')

    # generate gaussian kernel matrix of 7*7
    kernel = GaussianKernel(templateWindowSize, 1)

    # Run the non-local means for each pixel
    for j in range(height):
        for i in range(width):
            padj = j + padLength
            padi = i + padLength
            centerPatch = img[padj - patchWin: padj + patchWin + 1, padi - patchWin: padi + patchWin + 1]
            sumPixel = 0
            sumWeight = 0
            # Apply Gaussian weighted square distance between patches of 7*7 in a window of 21*21
            for r in range(padj - searchWind, padj + searchWind):
                for c in range(padi - searchWind, padi + searchWind):
                    otherPatch = img[r - patchWin: r + patchWin + 1, c - patchWin: c + patchWin + 1]
                    diff = centerPatch - otherPatch
                    distance_2 = np.multiply(diff, diff)
                    pixelWeight = np.sum(np.multiply(kernel, distance_2))
                    pixelWeight = np.exp(pixelWeight / (h**2))
                    sumWeight = sumWeight + pixelWeight
                    sumPixel = sumPixel + pixelWeight * img[r, c]

            outImage[j, i] = sumPixel / sumWeight
    outImage = np.clip(outImage, 0, 255)
    outImage = outImage.astype(np.uint8)
    return outImage

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:56:35  更:2022-01-30 18:57:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 21:37:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码