非局部均值滤波代码
21种nr的iqa处理算法及通用函数

21种nr的iqa处理算法及通用函数引言在数字图像处理中,图像质量评估(I QA)是一个重要的研究领域。
其中,噪声降低(N R)算法被广泛应用于提高图像的质量。
本文将介绍21种常用的NR的I Q A处理算法及通用函数。
1.均值滤波均值滤波是一种常见的降噪算法。
它通过计算像素周围邻域的均值来减小噪声。
均值滤波可以使用以下通用函数实现:d e fm ea n_fi lt er(im a ge):"""均值滤波"""实现算法代码r e tu rn fi lt er ed_im a ge2.中值滤波中值滤波也是一种常用的NR算法,它使用像素点周围邻域中的中值来减小噪声的影响。
以下是中值滤波的通用函数:d e fm ed ia n_fi lt er(i ma ge):"""中值滤波"""实现算法代码r e tu rn fi lt er ed_im a ge3.高斯滤波高斯滤波是一种基于高斯函数的线性平滑滤波器。
它通过计算像素点周围邻域的加权平均值来降低噪声。
以下是高斯滤波的通用函数:d e fg au ss ia n_fi lte r(i ma ge):"""高斯滤波"""实现算法代码r e tu rn fi lt er ed_im a ge4.双边滤波双边滤波是一种保留图像边缘的滤波方法。
它通过考虑像素点的空间距离和像素值之间的差异来平滑图像。
以下是双边滤波的通用函数:d e fb il at er al_f ilt e r(im ag e):"""双边滤波"""实现算法代码r e tu rn fi lt er ed_im a ge5.小波去噪小波去噪是一种基于小波变换的降噪方法。
平滑滤波方法研究

平滑滤波方法研究平滑滤波是低频增强的空间域滤波技术。
它的目的有两类:一类是模糊;另一类是消除噪音。
并且具有一定的处理要求,一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。
平滑滤波的方法有邻域平滑滤波,就是求邻近像元点的平均亮度值,双边滤波,中值滤波,以及非局部均值滤波等。
1、双边滤波法双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。
双边滤波的边缘保持特性主要是通过在卷积的过程中组合空域函数和值域核函数来实现的,典型的核函数为高斯分布函数,如下所示:其中:为归一化作用。
σs为空域高斯函数的标准差,σr为值域高斯函数的标准差,Ω表示卷积的定义域。
编写代码测试,当添加的噪声为0.05时,结果如下滤波后图像添加噪声为0.3时,结果如下滤波后图像由此可知,双边滤波具有去除噪音的作用2、邻域平均法邻域平滑滤波原理:邻域平均法就是对含噪声的原始图像f(x,y)的每一个像素点取一个邻域,计算S中所有像素灰度级的平均值,作为邻域平均处理后的图像g(x, y)的像素值。
即式中:x,y=0,1,…,N-1;S是以(x,y)为中心的邻域的集合,M是S 内的点数。
邻域平均法的思想是通过一点和邻域内像素点求平均来去除突变的像素点,从而滤掉一定噪声,其优点是算法简单,计算速度快,其代价会造成图像在一定程度上的模糊。
3、中值滤波法中值滤波就是用一个奇数点的移动窗口,将窗口的中心点的值用窗口内的各点中值代替。
假设窗口内有五点,其值为80、90、200、110和120,那么此窗口内各点的中值及为110。
设有一个一维序列f1,f2,…,fn,取窗口长度(点数)为m(m为奇数),对其进行中值滤波,就是从输入序列中相继抽出m个数fi-v,…,fi-1,fi,fi+1,…,fi+v(其中fi为窗口中心值,v=(m-1)/2),再将这m个点按其数值大小顺序排序,取其序号的中心点的那个数作为滤波输出。
数学公式表示为:Yi=Med{fi-v,…,fi-1,fi,fi+1,…,fi+v} i∈N v=(m-1)/2 (式1-2)Yi称为序列fi-v,…,fi-1,fi,fi+1,…,fi+v的中值例如,有一序列{0,3,4,0,7},重新排序后为{0,0,3,4,7}则Med{0,0,3,4,7}=3。
非局部均值滤波代码

% % Implementation of the Non local filter proposed for A. Buades, B. Coll and J.M. Morel in % "A non-local algorithm for image denoising" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Size of the image [m n]=size(input); % Memory for the output Output=zeros(m,n); % Replicate the boundaries of the input image input2 = padarray(input,[f f],'symmetric'); % Used kernel kernel = make_kernel(f); kernel = kernel / sum(sum(kernel)); h=h*h; for i=1:m for j=1:n i1 = i+ f; j1 = j+ f; W1= input2(i1-f:i1+f , j1-f:j1+f); wmax=0; average=0; sweight=0; rmin rmax smin smax = = = = max(i1-t,f+1); min(i1+t,m+f); max(j1-t,f+1); min(j1+t,n+f);
clear clc clf colormap(gray) % create example image ima=100*ones(100); ima(50:100,:)=50; ima(:,50:100)=2*ima(:,50:100); fs=fspecial('average'); ima=imfilter(ima,fs,'symmetric'); % add some noise sigma=10; rima=ima+sigma*randn(size(ima)); % show it imagesc(rima) drawnow % denoise it fima=NLmeansfilter(ima,5,2,sigma); % show results clf subplot(2,2,1),imagesc(ima),title('original'); subplot(2,2,2),imagesc(rima),title('noisy'); subplot(2,2,3),imagesc(fima),title('filtered'); subplot(2,2,4),imagesc(rimafima),title('residuals');
图像处理中的图像去噪方法对比与分析

图像处理中的图像去噪方法对比与分析图像处理是一门涉及数字图像处理和计算机视觉的跨学科领域。
去噪是图像处理中一个重要的任务,它的目的是减少或消除图像中的噪声,提高图像的质量和清晰度。
在图像处理中,有许多不同的去噪方法可供选择。
本文将对其中几种常见的图像去噪方法进行对比与分析。
首先是均值滤波器,它是最简单的去噪方法之一。
均值滤波器通过计算像素周围邻域的像素值的平均值来降低图像中的噪声。
它的优点是简单易懂,计算速度快,但它的效果可能不够理想,因为它会导致图像模糊。
接下来是中值滤波器,它是一种非线性滤波器。
中值滤波器通过对像素周围邻域的像素值进行排序,并选取中间值来替代当前像素的值。
它的优点是可以有效地去除椒盐噪声和激光点噪声等噪声类型,而且不会对图像的边缘和细节造成太大的损失。
然而,中值滤波器也有一些缺点,例如无法去除高斯噪声和处理大面积的噪声。
另一种常见的去噪方法是小波去噪。
小波去噪利用小波变换的多尺度分解特性,将图像分解为不同尺度的频带,然后根据频带的能量分布进行噪声和信号的分离,再对分离后的频带进行阈值处理和重构。
小波去噪的优点是可以提供较好的去噪效果,并且能够保留边缘和细节。
然而,小波去噪的计算复杂度较高,处理大尺寸的图像会耗费较多的时间。
另外,还有一种常见的图像去噪方法是非局部均值去噪(Non-local Means Denoising,NLM)。
NLM方法基于图像的纹理特征,通过计算像素周围的相似度来降噪。
它的优点是可以保持图像的纹理和细节,并且可以处理各种类型的噪声。
然而,NLM方法的计算复杂度较高,对于大尺寸的图像来说可能会耗费较多的时间。
最后,自适应滤波器也是一种常见的图像去噪方法。
自适应滤波器根据图像的局部特性来调整滤波器的参数,以达到更好的去噪效果。
它的优点是可以根据图像的特点进行自适应调整,并且可以有效地去除噪声和保留细节。
然而,自适应滤波器也存在一些缺点,例如可能会对图像的边缘造成一定的模糊。
非局部均值滤波解析

Circuit 原始图像
加入椒盐噪声图像
3X3均值滤波后的图像
NLM滤波后的图像
Circuit 原始图像
加入高斯噪声图像
3X3均值滤波后的图像
NLM滤波后的图像
非局部均值去噪法存在的问题
• 相似性度量缺乏鲁棒性 • 高斯加权核各向同性性质影响 • 非相似像素块影响 • 运算量大 • 加权核系数选择
hh==220 滤滤波波后后图图像像
• 表1. 去噪结果后PSNR比较
原始图像 噪声图像 n
NLM filter
0.8
1.4
2
Mean filter
pout
25.256
30.946 36.1940 34.300
34.532
10
Circuit
47.807
44.227 36.384 35.330
32.944
图1. 不同噪声强度下不同平滑参数h滤波效果
• 表2. NLM 滤波优先参数选择参考
ds
[0,7]
1
[7,9]
1
[9,19]
1
[20,28]
2
[28,47]
3
[47,70]
3
[70,87]
3
Ds
h
3
1.5
4
1.4
5
1.3
6
1.1
7
1.0
8
1.0
8
1.0
Original image
Gaussian noise image
图像去噪技术
图噪声
图像噪声:图像在摄取时或传输时所受到 的随机干扰信号。
图像噪声
椒盐噪声 高斯噪声 泊松噪声
一些软件滤波算法的原理和程序源代码

一些软件滤波算法的原理和程序源代码滤波算法是信号处理中常用的技术,用于去除信号中的噪声或抽取感兴趣的信号特征。
在本文中,我将介绍几种常见的软件滤波算法的原理和程序源代码,包括均值滤波、中值滤波和高斯滤波。
1.均值滤波均值滤波是一种简单直观的滤波算法。
其原理是通过计算像素周围邻近像素的平均值,来替换掉原始图像像素的值。
均值滤波的算法步骤如下:-创建一个大小为n的窗口(n通常为奇数),以当前像素为中心。
-计算窗口中所有像素的平均值。
-将当前像素的值替换为计算得到的平均值。
-按顺序处理所有像素。
以下是均值滤波的C++程序源代码示例:```cppvoid meanFilter(const cv::Mat& src, cv::Mat& dst, int kernelSize)int kernelHalfSize = kernelSize / 2;dst.create(src.size(, src.type();for (int y = 0; y < src.rows; y++)for (int x = 0; x < src.cols; x++)cv::Vec3f sum = cv::Vec3f(0, 0, 0);int numPixels = 0;for (int ky = -kernelHalfSize; ky <= kernelHalfSize; ky++) for (int kx = -kernelHalfSize; kx <= kernelHalfSize; kx++) int px = x + kx;int py = y + ky;if (px >= 0 && py >= 0 && px < src.cols && py < src.rows) sum += src.at<cv::Vec3b>(py, px);numPixels++;}}}cv::Vec3f average = sum / numPixels;dst.at<cv::Vec3b>(y, x) = average;}}```2.中值滤波中值滤波是一种非线性滤波算法,主要用于去除图片中的椒盐噪声。
非局部均值滤波

• 此时对于N个像素点的图像,搜索窗大小为D,计 算NL_Mean filter的复杂度为 O(ND2 )
• 积分图像算法的缺点:
• 它不直接允许的计算使用一个内核K加权范数,如 高斯。
• 当图像尺寸以及补丁距离很大, 积分图像的一些值 可能变得很大,即使使用双精度表示,最终结果的 准确性可能下降。
30.946 36.1940 34.300
10
Circuit
47.807
44.227 6.384 35.330
pout
30.656
32.080 32.382 31.336
20
Circuit
50.857
41.044 32.058 30.923
pout
46.361
27.969 29.296 29.134
• 基于快速傅里叶变换的NLM加速算法
• 给出距离为t的两个相似区域的2范数的离散卷积 形式:
v(x) v(x t) 2 2,K
K(z) v(x z) vx t z 2 2
{zZ 2: z ds }
~
K* st
其中
~
K(z) K(z)
, *表示卷积算子, st
NLM filter image
v(x) v(x t) 2 2
• 卷计算法可以用傅里叶变换求解。将上式做快速 二维傅里叶变换得到:
v(x) v(x t)
2 2,K
F1
F(
~
K
)F(
st
)
表1. 原始算法与使用FFT加速算法计算时间比较 (单位:秒)
原始算法计算时间 FFT计算时间 提高倍数
128X128 130.54 10.11 12.91
中值滤波和均值滤波C++代码

中值滤波和均值滤波C++代码均值滤波和中值滤波代码2008-11-24 16:07:36| 分类: |举报|字号//------------------均值滤波器bool FilterAV(unsigned char *image,int height,int width){int i,j;unsigned char *p=(unsigned char*)malloc(height*width);for(i=1;i<height-1;i++){for(j=1;j<width-1;j++){p[i*width+j]=(unsigned char)(((int)image[(i-1)*width+j-1]+(int)image[(i-1)*width+j]+(int)image[(i-1)*width+j+1]+(int)image[i*width+j-1]+(int)image[i*width+j]+(int)image[i*width+j+1]+(int)image[(i+1)*width+j-1]+(int)image[(i+1)*width+j]+(int)image[(i+1)*width+j+1])/9);}}for(i=1;i<height-1;i++){for(j=1;j<width-1;j++){image[i*width+j]=p[i*width+j];}}free(p);return true;}//----------------------------中值滤波器bool FilterMid(unsigned char *image,int height,int width){int i,j,k,l;int pos;unsigned char temp;unsigned char psr[9];unsigned char *p=(unsigned char*)malloc(height*width); for(i=1;i<height-1;i++){for(j=1;j<width-1;j++){ //---3*3窗⼝矩阵psr[0]=image[(i-1)*width+j-1];psr[1]=image[(i-1)*width+j];psr[2]=image[(i-1)*width+j+1];psr[3]=image[i*width+j-1];psr[4]=image[i*width+j];psr[5]=image[i*width+j+1];psr[6]=image[(i+1)*width+j-1];psr[7]=image[(i+1)*width+j];psr[8]=image[(i+1)*width+j+1];//--------选择排序for(k=0;k<9;k++){pos=k;for(l=k;l<9;l++){if(psr[l]<psr[pos])pos=l;}temp=psr[k];psr[k]=psr[pos];psr[pos]=temp;}//------取中值p[i*width+j]=psr[4];}}for(i=1;i<height-1;i++){for(j=1;j<width-1;j++){image[i*width+j]=p[i*width+j]; }}free(p);return true;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
clear
clc
clf
colormap(gray)
% create example image
ima=100*ones(100);
ima(50:100,:)=50;
ima(:,50:100)=2*ima(:,50:100);
fs=fspecial('average');
ima=imfilter(ima,fs,'symmetric');
% add some noise
sigma=10;
rima=ima+sigma*randn(size(ima));
% show it
imagesc(rima)
drawnow
% denoise it
fima=NLmeansfilter(ima,5,2,sigma);
% show results
clf
subplot(2,2,1),imagesc(ima),title('original');
subplot(2,2,2),imagesc(rima),title('noisy');
subplot(2,2,3),imagesc(fima),title('filtered');
subplot(2,2,4),imagesc(rima-fima),title('residuals');
function [output]=NLmeansfilter(input,t,f,h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
% input: image to be filtered
% t: radio of search window
% f: radio of similarity window
% h: degree of filtering
%
% Author: Jose Vicente Manjon Herrera & Antoni Buades
% Date: 09-03-2006
%
% Implementation of the Non local filter proposed for A. Buades, B. Coll and J.M. Morel in
% "A non-local algorithm for image denoising"
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Size of the image
[m n]=size(input);
% Memory for the output
Output=zeros(m,n);
% Replicate the boundaries of the input image
input2 = padarray(input,[f f],'symmetric');
% Used kernel
kernel = make_kernel(f);
kernel = kernel / sum(sum(kernel));
h=h*h;
for i=1:m
for j=1:n
i1 = i+ f;
j1 = j+ f;
W1= input2(i1-f:i1+f , j1-f:j1+f);
wmax=0;
average=0;
sweight=0;
rmin = max(i1-t,f+1);
rmax = min(i1+t,m+f);
smin = max(j1-t,f+1);
smax = min(j1+t,n+f);
for r=rmin:1:rmax
for s=smin:1:smax
if(r==i1 && s==j1) continue; end;
W2= input2(r-f:r+f , s-f:s+f);
d = sum(sum(kernel.*(W1-W2).*(W1-W2)));
w=exp(-d/h);
if w>wmax
wmax=w;
end
sweight = sweight + w;
average = average + w*input2(r,s);
end
end
average = average + wmax*input2(i1,j1);
sweight = sweight + wmax;
if sweight > 0
output(i,j) = average / sweight;
else
output(i,j) = input(i,j);
end
end
end
function [kernel] = make_kernel(f)
kernel=zeros(2*f+1,2*f+1);
for d=1:f
value= 1 / (2*d+1)^2 ;
for i=-d:d
for j=-d:d
kernel(f+1-i,f+1-j)= kernel(f+1-i,f+1-j) + value ;
end
end
end
kernel = kernel ./ f;。