求高手帮忙看一下 下面这个求两幅图像均方误差MSE和峰值信噪比PSNR的小程序有无问题

求高手帮忙看一下 下面这个求两幅图像均方误差MSE和峰值信噪比PSNR的小程序有无问题,第1张

好像你的方差求的有点问题。

function n=psnr(I,K1)

A1=double(I);

B1=double(K1);

[m,n]=size(A1);

err=0;

sum=0;

for i=1:1:m,

for j=1:1:n,

err=err+(A1(i,j)-B1(i,j))(A1(i,j)-B1(i,j));

sum=sum+A1(i,j)A1(i,j);

end

end

psnr=err/sum;

psnr_before_noisedelete=-10log10(psnr)

PSNR=num2str(psnr_before_noisedelete);

disp(psnr'); %显示

这是我用的程序,求出的结果你自己看看吧。

我是自己先定义的一个函数,之后再求的snr。我用上面的函数求的结果一般小于30。

%利用小波变换对8位灰度图像进行去噪去噪处理,最后显示信噪比和均方误差

clear all;clc;

A=imread('d:/photo/fabric/cd4 - 复制bmp');

subplot(121),imshow(A);title('original imge');

[m,n]=size(A);

A=double(A);

%选取分解小波

display('选择分解的小波:');

display('enter 1 for haar wavelet');

display('enter 2 for db2 wavelet');

display('enter 3 for db4 wavelet');

display('enter 4 for sym wavelet');

display('enter 5 for sym wavelet');

display('enter 6 for bior wavelet');

display('enter 7 for bior wavelet');

display('enter 8 for mexh wavelet');

display('enter 9 for coif wavelet');

display('enter 10 for meyr wavelet');

display('enter 11 for morl wavelet');

display('enter 12 for rbio wavelet');

display('press any key to quit');

ww=input('enter your choice: ');

switch ww

case 1

wv='haar';

case 2

wv='db2';

case 3

wv='db4' ;

case 4

wv='sym2'

case 5

wv='sym4';

case 6

wv='bior11';

case 7

wv='bior68';

case 8

wv='mexh';

case 9

wv='coif5';

case 10

wv='dmey';

case 11

wv='mor1';

case 12

wv='jpeg97';

otherwise

quit;

end

%选取分解的层数

display('选择分解层数:');

levels=input('enter 1 or 2 : ');

filtertype=wv;

[C,S]=wavedec2(A,levels,filtertype); %小波分解

var=length(C)-S(size(S,1)-1,1)^2+1;

%{

%第一中去噪方法:用此种方法时,效果与选取分解的层数没有关系,只与选取的小波有关系

C(var:length(C))=0; %将对角线的高频系数置零

B=waverec2(C,S,filtertype); %重构图像

%}

%{

%第二种去噪方法:贝叶斯阈值去噪,对各个高频系数进行贝叶斯阈值去噪

display('选择软阈值或者硬阈值:');

display('enter 1 for soft thresholding');

display('enter 2 for hard thresholding');

sorh=input('sorh: ');

sigmahat=median(abs(C(var:length(C))))/06745; %Calculating sigmahat

st=(S(1,1)^2)+1; %低频系数的个数

bayesC=[C(1:st-1),zeros(1,length(st:1:length(C)))]; %只是保留低频信息

for jj=2:size(S,1)-1 %行数

%对于水平高频系数

coeh=C(st:st+S(jj,1)^2-1);

thr=bayes(coeh,sigmahat);

if sorh==1

bayesC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr);

end

if sorh==2

bayesC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr);

end

st=st+S(jj,1)^2;

%对于垂直高频系数

coev=C(st:st+S(jj,1)^2-1);

thr=bayes(coev,sigmahat);

if sorh==1

bayesC(st:st+S(jj,1)^2-1)=sthresh(coev,thr);

end

if sorh==2

bayesC(st:st+S(jj,1)^2-1)=hthresh(coev,thr);

end

st=st+S(jj,1)^2;

%对于对角高频系数

coed=C(st:st+S(jj,1)^2-1);

thr=bayes(coed,sigmahat);

if sorh==1

bayesC(st:st+S(jj,1)^2-1)=sthresh(coed,thr);

end

if sorh==2

bayesC(st:st+S(jj,1)^2-1)=hthresh(coed,thr);

end

st=st+S(jj,1)^2;

end

B=waverec2(bayesC,S,filtertype); %重构图像

%}

%{

%第三种方法:采用Donoho和Johnstone提出的固定阈值的方法进行去噪处理

display('选择软阈值或者硬阈值:');

display('enter 1 for soft thresholding');

display('enter 2 for hard thresholding');

sorh=input('sorh: ');

st=(S(1,1)^2)+1; %低频系数的个数

djC=[C(1:st-1),zeros(1,length(st:1:length(C)))]; %只是保留低频信息

for jj=2:size(S,1)-1 %行数

%对于水平高频系数

coeh=C(st:st+S(jj,1)^2-1);

sigmah=median(abs(coeh))/06745;

thr=sigmahsqrt(2log10(length(coeh)));

if sorh==1

djC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr);

end

if sorh==2

djC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr);

end

st=st+S(jj,1)^2;

%对于垂直高频系数

coev=C(st:st+S(jj,1)^2-1);

sigmav=median(abs(coev))/06745;

thr=sigmavsqrt(2log10(length(coev)));

if sorh==1

djC(st:st+S(jj,1)^2-1)=sthresh(coev,thr);

end

if sorh==2

djC(st:st+S(jj,1)^2-1)=hthresh(coev,thr);

end

st=st+S(jj,1)^2;

%对于对角高频系数

coed=C(st:st+S(jj,1)^2-1);

sigmad=median(abs(coed))/06745;

thr=sigmavsqrt(2log10(length(coed)));

if sorh==1

djC(st:st+S(jj,1)^2-1)=sthresh(coed,thr);

end

if sorh==2

djC(st:st+S(jj,1)^2-1)=hthresh(coed,thr);

end

st=st+S(jj,1)^2;

end

B=waverec2(djC,S,filtertype); %重构图像

%}

subplot(122),imshow(uint8(B));title('de-noised image');

%imwrite(B,'fab5bmp'); %保存图像在m文件的路径中

%计算信噪比

t=0;

for i=1:m

for j=1:n

t=t+(abs(B(i,j)-A(i,j)))^2;

end

end

mse=t/(mn); %图像均方误差

psnr=10log10((255^2)/mse); %峰值信噪比

display('mse:');

mse

display('psnr:');

psnr

clear all;

close all;

x=0:02:10;

data1=sin(x);

plot(x,data1);

hold on;

data2=awgn(data1,10log10(005));

plot(x,data2,'r-');

hold off;

扩展资料

matlab添加白噪声叠加到信号:

function [Y,NOISE] = noisegen(X,SNR)

% noisegen add white Gaussian noise to a signal

% [Y, NOISE] = NOISEGEN(X,SNR) adds white Gaussian NOISE to X  The SNR is in dB

NOISE=randn(size(X));

NOISE=NOISE-mean(NOISE);

signal_power = 1/length(X)sum(XX);

noise_variance = signal_power / ( 10^(SNR/10) );

NOISE=sqrt(noise_variance)/std(NOISE)NOISE;

Y=X+NOISE;

其中X是纯信号,SNR是要求的信噪比,Y是带噪信号,NOISE是叠加在信号上的噪声。

'uint8' 是8bit正整数。出错是说psnr不识别整数的输入。

你试试psnr(double(I),double(I1))

如果还不好使。

你的函数必须存在另外一个叫psnrm的文件里

函数可以写在函数里,写在脚本里的函数不好使。

图象的信噪比等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图象信噪比,即信号与噪声的方差之比。

计算方法:

1、计算图象所有象素的局部方差;

2、将局部方差的最大值认为是信号方差,最小值是噪声方差;

3、求出它们的比值;

4、再转成dB数;

5、最后用经验公式修正。

图像去噪是将一个存在噪声的图像进行处理,提高图像质量,其中信噪比是常用的评价指标之一。在评价图像去噪效果时,可以通过查看信噪比来了解去噪效果的好坏程度,信噪比越高,代表图像中信号与噪声的比例越高,即去噪效果越好。

通常,在图像去噪过程中,可以通过相关软件或代码实现对信噪比的计算,并查看其数值大小。一些常见的图像处理软件,如Matlab、OpenCV等都可以计算信噪比。此外,也可以通过自己编写相关代码来实现信噪比的计算。

具体计算信噪比的方式与算法都有多种,例如峰值信噪比(PSNR)、结构相似性指数(SSIM)等。在使用时,需要根据具体的应用和研究目的,选择或设计合适的信噪比计算算法。

总之,信噪比是评价图像去噪效果的重要指标之一,在评价其优劣时可以通过相关软件或代码实现计算,并查看其数值大小。

信噪比SNR就是signal-to-noise ratio,使用电压平方比来定义的,是信号电压与噪声电压之比的平方的对数的十倍,在图像中被用来表示解压缩的客观保真度准则。如果把f(x,y)看做原始图g(x,y)和噪声信号e(x,y)的和,输出图的均方信噪比就是合成图像时采用SNR=(目标背景的灰度对比度/噪声均方差)的平放来进行估计。正如刚才所说,具体的计算方式是根据不同的具体应用而变化的,有的时候只有噪声电压使用均方根做单位,等等。

以上就是关于求高手帮忙看一下 下面这个求两幅图像均方误差MSE和峰值信噪比PSNR的小程序有无问题全部的内容,包括:求高手帮忙看一下 下面这个求两幅图像均方误差MSE和峰值信噪比PSNR的小程序有无问题、急~!求助 matlab小波图像去噪的源程序...处理.bmp格式的图像....真的很急!!!邮箱:[email protected] ...、matlab如何添加自定义信噪比的噪声信号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9835716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存