一个matlab简单图像处理的程序,共执行了均值,中值滤波,然后计算各个处理后图像的MSE,PSNR等值 100
为什么最后计算出来的两组MSE,PSNR值是一样的?没可能啊,求大神修改,程序如下:I=imread('boat.bmp');J=imnoise(I,'gaussian'...
为什么最后计算出来的两组MSE,PSNR值是一样的?没可能啊,求大神修改,程序如下:
I=imread('boat.bmp');
J=imnoise(I,'gaussian',0,0.01);
Jg=double(J);
%均值滤波
k1=filter2(fspecial('average',3),Jg);
k2=filter2(fspecial('average',5),Jg);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k1));title('3*3模板均值滤波');
subplot(224),imshow(uint8(k2));title('5*5模板均值滤波');
%中值滤波
k3=medfilt2(Jg,[3 3]);
k4=medfilt2(Jg,[5 5]);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k3));title('3*3模板中值滤波');
subplot(224),imshow(uint8(k4));title('5*5模板中值滤波');
%计算均值滤波后图像的PMSE与PSNR
[X]=I; %装载原始图像
[Y]=k1; %装载处理后的图像
mse=0;
%这里假定所处理图像为8比特的灰度图像,L = 512
for i=1:512
for j=1:512
mse=mse+(X(i,j)-Y(i,j))*(X(i,j)-Y(i,j));
end
end
mse=double(mse)/(512*512)
psnr=double(10*log(512*512/mse)/log(10));
%下面计算原始图像文件的熵
t(1)=0; %保存各个灰度值出现概率
for i=1:512
t(i)=0;
end
%给每个灰度值计数
for i=1:512
for j=1:512
t(X(i,j)+1)=t(X(i,j)+1)+1;
end
end
%计算各个灰度值出现的概率
for i=1:512
t(i)=t(i)/(512*512);
end
entropy =0; %计算图像熵
for i=1:512
if t(i)>0
entropy = entropy -t(i)*log(t(i))/log(2)
end
end
pmse_avg=mse;
psnr_avg=psnr;
entropy_avg=entropy;
%计算中值滤波后的各项指标
[Y]=k3; %装载处理后的图像
mse=0;
%这里假定所处理图像为8比特的灰度图像,L = 255
for i=1:512
for j=1:512
mse=mse+(X(i,j)-Y(i,j))*(X(i,j)-Y(i,j));
end
end
mse=double(mse)/(512*512)
psnr=10*log(512*512/mse)/log(10);
%下面计算原始图像文件的熵
t(1)=0; %保存各个灰度值出现概率
for i=1:512
t(i)=0;
end
%给每个灰度值计数
for i=1:512
for j=1:512
t(X(i,j)+1)=t(X(i,j)+1)+1;
end
end
%计算各个灰度值出现的概率
for i=1:512
t(i)=t(i)/(512*512);
end
entropy =0; %计算图像熵
for i=1:512
if t(i)>0
entropy = entropy -t(i)*log(t(i))/log(2)
end
end
pmse_mid=mse;
psnr_mid=psnr;
entropy_mid=entropy; 展开
I=imread('boat.bmp');
J=imnoise(I,'gaussian',0,0.01);
Jg=double(J);
%均值滤波
k1=filter2(fspecial('average',3),Jg);
k2=filter2(fspecial('average',5),Jg);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k1));title('3*3模板均值滤波');
subplot(224),imshow(uint8(k2));title('5*5模板均值滤波');
%中值滤波
k3=medfilt2(Jg,[3 3]);
k4=medfilt2(Jg,[5 5]);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k3));title('3*3模板中值滤波');
subplot(224),imshow(uint8(k4));title('5*5模板中值滤波');
%计算均值滤波后图像的PMSE与PSNR
[X]=I; %装载原始图像
[Y]=k1; %装载处理后的图像
mse=0;
%这里假定所处理图像为8比特的灰度图像,L = 512
for i=1:512
for j=1:512
mse=mse+(X(i,j)-Y(i,j))*(X(i,j)-Y(i,j));
end
end
mse=double(mse)/(512*512)
psnr=double(10*log(512*512/mse)/log(10));
%下面计算原始图像文件的熵
t(1)=0; %保存各个灰度值出现概率
for i=1:512
t(i)=0;
end
%给每个灰度值计数
for i=1:512
for j=1:512
t(X(i,j)+1)=t(X(i,j)+1)+1;
end
end
%计算各个灰度值出现的概率
for i=1:512
t(i)=t(i)/(512*512);
end
entropy =0; %计算图像熵
for i=1:512
if t(i)>0
entropy = entropy -t(i)*log(t(i))/log(2)
end
end
pmse_avg=mse;
psnr_avg=psnr;
entropy_avg=entropy;
%计算中值滤波后的各项指标
[Y]=k3; %装载处理后的图像
mse=0;
%这里假定所处理图像为8比特的灰度图像,L = 255
for i=1:512
for j=1:512
mse=mse+(X(i,j)-Y(i,j))*(X(i,j)-Y(i,j));
end
end
mse=double(mse)/(512*512)
psnr=10*log(512*512/mse)/log(10);
%下面计算原始图像文件的熵
t(1)=0; %保存各个灰度值出现概率
for i=1:512
t(i)=0;
end
%给每个灰度值计数
for i=1:512
for j=1:512
t(X(i,j)+1)=t(X(i,j)+1)+1;
end
end
%计算各个灰度值出现的概率
for i=1:512
t(i)=t(i)/(512*512);
end
entropy =0; %计算图像熵
for i=1:512
if t(i)>0
entropy = entropy -t(i)*log(t(i))/log(2)
end
end
pmse_mid=mse;
psnr_mid=psnr;
entropy_mid=entropy; 展开
展开全部
%我觉得是你计算 PSNR的方法错了,应该是用最大像素值,
%灰度图像的最大像素值是255, 而不是512。
%另外计算MSE也不用那么麻烦
%下面是计算 MSE和PSNR的程序,我拿一张图片试了一下,结果肯定是不一样的。
%还有统计像素值出现的次数,用直方图imhist会更简单点,这个程序我没写。
I=imread('boat.bmp');
J=imnoise(I,'gaussian',0,0.01);
Jg=double(J);
%均值滤波
k1=filter2(fspecial('average',3),Jg);
k2=filter2(fspecial('average',5),Jg);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k1));title('3*3模板均值滤波');
subplot(224),imshow(uint8(k2));title('5*5模板均值滤波');
%中值滤波
k3=medfilt2(Jg,[3 3]);
k4=medfilt2(Jg,[5 5]);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k3));title('3*3模板中值滤波');
subplot(224),imshow(uint8(k4));title('5*5模板中值滤波');
%计算均值滤波后图像的PMSE与PSNR
diff=(double(I)-k1).^2;
mse=mean(diff(:));
pmse_avg=mse;
max_value=max(k1(:));
psnr=double(10*log(max_value*max_value/mse)/log(10));
%计算中值滤波后的各项指标
diff=(double(I)-k3).^2;
mse=mean(diff(:));
max_value=max(k3(:));
pmse_mid=mse;
psnr_mid=double(10*log(max_value*max_value/mse)/log(10));
%灰度图像的最大像素值是255, 而不是512。
%另外计算MSE也不用那么麻烦
%下面是计算 MSE和PSNR的程序,我拿一张图片试了一下,结果肯定是不一样的。
%还有统计像素值出现的次数,用直方图imhist会更简单点,这个程序我没写。
I=imread('boat.bmp');
J=imnoise(I,'gaussian',0,0.01);
Jg=double(J);
%均值滤波
k1=filter2(fspecial('average',3),Jg);
k2=filter2(fspecial('average',5),Jg);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k1));title('3*3模板均值滤波');
subplot(224),imshow(uint8(k2));title('5*5模板均值滤波');
%中值滤波
k3=medfilt2(Jg,[3 3]);
k4=medfilt2(Jg,[5 5]);
figure,subplot(221),imshow(I);title('原图');
subplot(222),imshow(J);title('加入高斯白噪声以后的图像');
subplot(223),imshow(uint8(k3));title('3*3模板中值滤波');
subplot(224),imshow(uint8(k4));title('5*5模板中值滤波');
%计算均值滤波后图像的PMSE与PSNR
diff=(double(I)-k1).^2;
mse=mean(diff(:));
pmse_avg=mse;
max_value=max(k1(:));
psnr=double(10*log(max_value*max_value/mse)/log(10));
%计算中值滤波后的各项指标
diff=(double(I)-k3).^2;
mse=mean(diff(:));
max_value=max(k3(:));
pmse_mid=mse;
psnr_mid=double(10*log(max_value*max_value/mse)/log(10));
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
展开全部
其实你列举的几种方法和增强处理之间是有重叠的,建议你看一些图像增强的例子,先有个直观感受,然后才好理解这些概念。 学图像处理,未必要把各种方法妥善,qAazbi
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做图像处理别总用matlab,多用用vc
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |