当前位置: 首页 > news >正文

数字图像处理(二)

 五、图像退化与复原

(1) 使用Matlab里image processing toolbox中的函数对图像’boat.bmp’ 分别进行以下模糊化处理,显示输出图像并计算输出PSNR值。

a、运动模糊(位移20像素,运动角度130度)

b、运动模糊(位移20像素,运动角度130度)后添加高斯噪声

c、运动模糊(位移20像素,运动角度130度)后添加椒盐噪声

(2) 使用Matlab里image processing toolbox中的函数对以上三种模糊后的图像进行逆滤波, 维纳滤波和约束最小二乘方滤波,对比滤波前和滤波后的输出图像质量和PSNR值。

(3) 不使用image processing toolbox 中的已有的逆滤波, 维纳滤波和约束最小二乘方滤波滤波器函数,根据以下滤波器的理论公式编写以上三种滤波器的函数,对比输出图像质量和PSNR值。

注:如输出图像较多,可用subplot函数将多个图片集中在一个图片中进行对比,并在标题标注好每个小图代表的内容。

1、理论基础

逆滤波,维纳滤波和约束最小二乘法滤波的理论公式基础(参考冈萨雷斯版本数字图像处理):

2、代码

% ----------------(1)图像处理为运动模糊+噪声-------------%
% 读取图像
img = imread('D:\MATLAB\work\DIP\boat.bmp');
% subplot(141),imshow(img);title('原始图像');
% 运动模糊参数
move = 20;
angle = 130;
% 创建运动模糊核
motion= fspecial('motion', move, angle);
% 应用运动模糊
blur_Img = imfilter(img,motion,'circular', 'conv' );
% 显示输出图像
subplot(142),imshow(blur_Img);title('move = 20,angle = 130°Image');
% % 计算PSNR值
% psnrValue = psnr(blur_Img, img);
% disp(['PSNR值为: ', num2str(psnrValue)]);
% 加入方差为0.01的高斯噪声
noisy_img = imnoise(blur_Img, 'gaussian', 0, 0.01);
subplot(1,4,3);imshow(noisy_img);title('运动模糊加入高斯噪声的图像');
noisy_img2 = psnr(noisy_img, img);
disp(['运动模糊加入高斯噪声为: ', num2str(noisy_img2)]);
% 添加5%椒盐噪声
noisy2_img = imnoise(blur_Img, 'salt & pepper', 0.05);
subplot(1,4,4);imshow(noisy2_img);title('运动模糊加入椒盐噪声后图像');
noisy_img3 = psnr(noisy2_img ,img);
disp(['运动模糊加入椒盐噪声为: ', num2str(noisy_img3)]);% ----------------(2)matlab函数的三种滤波-------------%
% 逆滤波
Img_inv = deconvwnr(noisy_img, motion,0 );
% 维纳滤波
Img_wiener = deconvwnr( noisy_img, motion,0.6);
% 约束最小二乘方滤波
Img_lsq = deconvlucy( noisy_img, motion, 1);% 显示逆滤波后的图像
subplot(1,4,1);imshow(Img_inv);title('逆滤波后图像');
% 计算逆滤波后图像的PSNR值
psnr_inv = psnr(Img_inv, img);
disp(['逆滤波后图像的PSNR值为: ', num2str(psnr_inv)]);% 显示维纳滤波后的图像
subplot(1,4,2);imshow(Img_wiener);title('维纳滤波后图像');
% 计算维纳滤波后图像的PSNR值
psnr_wiener = psnr(Img_wiener, img);
disp(['维纳滤波后图像的PSNR值为: ', num2str(psnr_wiener)]);% 显示约束最小二乘方滤波后的图像
subplot(1,4,3);imshow(Img_lsq);title('约束最小二乘方滤波后图像');
% 计算约束最小二乘方滤波后图像的PSNR值
psnr_lsq = psnr(Img_lsq, img);
disp(['约束最小二乘方滤波后图像的PSNR值为: ', num2str(psnr_lsq)]);% ----------------(3)理论定义的三种滤波-------------%
% 读取图像
img = imread('D:\MATLAB\work\DIP\boat.bmp');
% 运动模糊参数
% 创建运动模糊核
motion= fspecial('motion', 20, 130);
% 应用运动模糊
blur_Img = imfilter(img,motion,'circular', 'conv' );
noisy_img = imnoise(blur_Img, 'gaussian', 0, 0.01);% 加入方差为0.01的高斯噪声
noisy2_img = imnoise(blur_Img, 'salt & pepper', 0.05);% 添加5%椒盐噪声
double_img=im2double(img);  
[width,height]=size(double_img);
%逆滤波
If = fft2(blur_Img);
Pf = fft2(motion,width,height);
deblurred = ifft2(If./Pf);
subplot(1,3,1), imshow(deblurred); title('逆滤波处理运动模糊图像')
% 
%维纳滤波blurred_image_fft = fft2(blur_Img );kernel_fft = fft2(motion, size(blur_Img, 1), size(blur_Img, 2));H = conj(kernel_fft) ./ (abs(kernel_fft).^2 + 0.01);restored_image_fft = H .* blurred_image_fft;restored_image = ifft2(restored_image_fft);restored_image = abs(restored_image);restored_image = restored_image / max(restored_image, [], 'all');subplot(1, 3, 2), imshow(restored_image), title('维纳滤波处理运动模糊图像');
% 约束最小二乘滤波
H = psf2otf(motion,[height,width]);
p = [0 -1 0;-1 4 -1;0 -1 0];%拉普拉斯模板
P = psf2otf(p,[height,width]);
G = fft2(blur_Img);
gamma=0.6;
numerator = conj(H);
denominator = H.^2+gamma*(P.^2);
deblur_f = ifft2(numerator.*G./denominator);
subplot(1,3,3);
imshow(deblur_f,[]);
title('约束最小二乘处理运动模糊图像')%逆滤波处理噪声+运动模糊
noisy = noisy2_img - blur_Img ;Nf = fft2(noisy);
If = fft2(blur_Img);Pf = fft2(motion,width,height);
deblurred2 = ifft2(If./Pf - Nf./Pf);
subplot(1,3,1), imshow(deblurred2);title('逆滤波处理加入椒盐噪声的运动模糊图像');%维纳滤波处理噪声+运动模糊
K = 0.01;
noise_var=0.05;
blurred_noisy_image_fft = fft2(noisy2_img);
kernel_fft = fft2(motion, size(noisy2_img, 1), size(noisy2_img, 2));H = conj(kernel_fft) ./ (abs(kernel_fft).^2 + K);
restored_image_fft = H .* blurred_noisy_image_fft;
restored_image = ifft2(restored_image_fft);
restored_image = abs(restored_image);
restored_image = restored_image / max(restored_image, [], 'all');
subplot(1, 3, 2), imshow(restored_image), title('维纳滤波处理有椒盐噪声的运动模糊图像');% 约束最小二乘滤波处理噪声+运动模糊
H = psf2otf(motion,[height,width]);
p = [0 -1 0;-1 4 -1;0 -1 0];%拉普拉斯模板
P = psf2otf(p,[height,width]);G = fft2(noisy2_img);
gamma=0.6;
numerator = conj(H);
denominator = H.^2+gamma*(P.^2);
deblur_f = ifft2(numerator.*G./denominator);
subplot(1,3,3);imshow(deblur_f,[]);title('约束最小二乘复原的椒盐运动模糊图像')

3、图像分析

运动模糊的图像:

        通过分别使用matlab里面函数工具对图像(PSNR为22.2185)进行处理:逆滤波,维纳滤波和约束最小二乘方滤波通过对参数的调整尽可能使图像能滤波出来,滤波后图像明显可以看出使用逆滤波勉强能将图像处理出来,但是图像画质,细节处理的很不好;使用维纳滤波和约束最小二乘方滤波能基本上将运动模糊的图像还原出来,图像质量相对较好,再通过对比PSNR可以发现后两种滤波的值都大于运动模糊的PSNR,反映了重建图像与原始图像之间的相似程度远比使用逆滤波好。        

        运动模糊加高斯噪声的图像(PSNR=17.98):用逆滤波处理的图像PSNR=5.37,从此时开始无法将图像还原处理,接着用维纳滤波和约束最小二乘方滤波处理,能将图片重建出来,但是效果不如仅仅是处理运动模糊的图像,PSNR的值也是在17-18区间,相似程度不断减小,滤波出来的效果也仅勉强处理高斯噪声部分,但未能处理运动模糊。

        运动模糊加椒盐噪声的图像(PSNR=16.908):经过逆滤波的图像依旧不能将图片重建出来,维纳滤波也仅是能将图片去椒盐处理,但是随着参数的调整,图片整体可以变得平滑,但是随之带来的是明亮程度的急剧下跌,以及PSNR=17.4789,效果也不是很好。经过约束最小二乘方滤波处理后的图像,也能明显看出椒盐噪声未能全部去除以及PSNR=16.98,与原图的相似程度也不如仅处理运动模糊的图像;

(3)使用三种滤波的理论公式逆滤波处理:
处理只有运动模糊的图像:

可以看出,能效果较好处理出只有运动模糊的图像的是维纳滤波和约束最小二乘滤波,逆滤波在本次实验中未能还原出来。

处理运动模糊和高斯噪声的图像:

可以看出,能效果较好处理出运动模糊和高斯噪声的图像的是维纳滤波和约束最小二乘滤波,但是在加了高斯噪声后,两者处理出来的图像质量下降,维纳滤波明亮程度变暗,约束最小二乘滤波使得图像不够平滑,最后逆滤波在本次实验中仍未能还原出来。

处理运动模糊和椒盐噪声的图像:

可以看出,能看出图像模型的是维纳滤波和约束最小二乘滤波,但是在加了椒盐噪声后,维纳滤波明亮程度更暗,约束最小二乘滤波使得图像不够平滑,甚至某些区域出现畸变,最后逆滤波在本次实验中仍未能还原出来。

4、讨论

(1)点扩散函数PSF的含义和作用是什么?

        点扩散函数(Point Spread Function, PSF)是指在光学成像系统中,由于物体的光斑在传输过程中受到光学系统的影响,形成的像点图案。它描述了一个理想的点光源通过光学系统成像后在感光面上的分布情况。PSF是对成像系统的评价和研究非常重要的参数,可以用来评估成像系统的分辨率、模糊程度等性能指标。

        PSF的作用主要有两个方面:一方面,可以用来描述光学系统的成像质量,即成像系统对物体细节的捕捉能力;另一方面,PSF可以用于图像复原算法中,通过反卷积算法将模糊的图像恢复到清晰状态。

(2)逆滤波,维纳滤波和约束最小二乘方滤波的优缺点是什么?

        逆滤波是一种基本的解卷积技术,其原理是通过估计系统的脉冲响应来恢复被损坏的信号。逆滤波的优点是计算简单,易于实现,但是它对于噪声和模糊很敏感,因此在实际应用中容易产生误差。

        维纳滤波是一种常见的信号恢复方法,它是基于最小均方误差准则的一种优化方法。维纳滤波可以对噪声进行有效抑制,并且可以减少信号失真,适用于高斯白噪声的去噪处理。但是,在信号噪声比较低的情况下,维纳滤波会引入较大的偏差。

        约束最小二乘方滤波是一种常用的图像恢复方法,它采用了最小二乘法来平衡信号恢复和噪声抑制之间的关系,并通过添加约束条件来提高恢复结果的稳定性。约束最小二乘方滤波可以有效地抑制噪声,保留图像的细节信息,并且具有很好的稳定性。但是,在处理大规模图像时,其计算量会变得很大。

(3)在输出噪声被放大的情况下,如何在仍然使用逆滤波的情况下改善输出结果?如何修改前面的代码,并显示输出结果和计算PSNR值?

        在输出噪声被放大的情况下,逆滤波可能会使结果变得更加糟糕。这是由于逆滤波非常敏感于输入信号的高频部分,同时也对高斯噪声非常敏感。因此,在使用逆滤波之前,需要进行一些预处理来减少噪声的影响。这些预处理方法包括:对输入信号进行平滑处理:可以使用低通滤波器来降低信号的高频成分,并减少噪声的影响。或者对输入信号进行加权处理:可以对输入信号进行一些加权处理,以减少噪声的影响。例如,可以使用加权平均法来降低噪声的影响。使用正则化方法:可以使用一些正则化方法来减少逆滤波的敏感性,例如Tikhonov正则化。考虑使用其他的去噪方法:如果以上预处理方法不能够减少噪声的影响,可以考虑使用其他的去噪方法,例如小波去噪、中值滤波等。

(4)如何修改前面的代码:通过平均滤波器进行预处理

% 对图像进行平滑处理
smoothed_img = imfilter(noisy_img, fspecial('average', [5 5])); % 使用5x5的平均滤波器进行平滑处理
% 对平滑处理后的图像进行逆滤波
img_inv_smoothed = deconvwnr(smoothed_img, motion, 0);
% 显示逆滤波后的图像
subplot(142), imshow(img_inv_smoothed), title('平滑处理逆滤波的图像');
% 计算逆滤波后图像的PSNR值
psnr_inv2 = psnr(img_inv_smoothed, img);
disp(['平滑处理后逆滤波后图像的PSNR值为: ', num2str(psnr_inv2)]);

六、彩色图像的加噪与去噪

1、理论基础

(1)对图像“lena_256color.bmp”加高斯白噪声;RGB三通道的噪声不同,其中sigma_r=10; sigma_g=30; sigma_b=50。

(2)对上述加噪后的图像去噪。

(3)如果这种模型的去噪效果欠佳,有什么其它的办法吗?

2、代码

img = imread('D:\MATLAB\work\DIP\lena_256color.bmp');
% 分别设置三个通道的高斯噪声水平
sigma_r = 10;
sigma_g = 30;
sigma_b = 50;
% 生成每个通道的高斯白噪声
noise_r = sigma_r * randn(size(img(:,:,1)));
noise_g = sigma_g * randn(size(img(:,:,2)));
noise_b = sigma_b * randn(size(img(:,:,3)));
% 向每个通道添加高斯白噪声
noisy_img = img;
noisy_img(:,:,1) = double(img(:,:,1)) + noise_r;
noisy_img(:,:,2) = double(img(:,:,2)) + noise_g;
noisy_img(:,:,3) = double(img(:,:,3)) + noise_b;% 显示原始图像和添加噪声后的图像
subplot(131), imshow(img), title('Original Image');
subplot(132), imshow(uint8(noisy_img)), title('Noisy Image');
% 保存添加噪声后的图像
imwrite(uint8(noisy_img), 'noisy_image.jpg');%创建高斯滤波器模板
gaus_Filter = fspecial('gaussian', [3 3], 2);
% 应用高斯滤波器去噪
denoised_r = imfilter(noisy_img(:,:,1), gaus_Filter, 'replicate');
denoised_g = imfilter(noisy_img(:,:,2), gaus_Filter, 'replicate');
denoised_b = imfilter(noisy_img(:,:,3), gaus_Filter, 'replicate');
% 合并通道
denoised_img = uint8(cat(3, denoised_r, denoised_g, denoised_b));
% 显示结果
subplot(133), imshow(denoised_img), title('Denoised Image');

 3、图像分析

第二个图是加了高斯白噪声的彩色图,通过使用高斯滤波器对第二个图进行去噪得出第三个图,可以明显看出去噪后的图像仍有部分噪声,并不能完全去噪,去噪效果不是很好。

除了使用高斯滤波器之外,还有一些其他的方法可以用来去除彩色图像中的高斯噪声,中值滤波器(Median Filter):中值滤波器能很好地保留图像的边缘信息,同时有效去除高斯噪声和脉冲噪声。双边滤波器(Bilateral Filter):能同时考虑像素的空间邻近度和灰度相似度,从而更好地保留边缘信息。非局部均值滤波器(Non-Local Means Filter):利用图像中相似区域的信息来去噪,能更好地保留细节纹理。还有小波变换(Wavelet Transform):能够在不同尺度上分解图像,从而更好地去除不同频率的噪声。

七、伪彩色图像增强

1、理论基础

对灰度图像“Airport.tiff”使用进行伪彩色增强。

(1)使用Matlab 内建函数实现灰度分层法,分别显示将灰度图像分为3层、10层和50层后的结果。

(2)使用灰度变换法,利用图1变换函数编写代码(注意像素归一化),N为灰度级总数。将结果与以上灰度分层法进行比较,分析各自优缺点。

2、代码

%灰度分层法:
img = imread('D:\MATLAB\work\DIP\Airport.tiff');
% 将手动划分图像阈值为50层
level_values = linspace(0, 255, 3+1);
level_img = imquantize(img, level_values);level_values2 = linspace(0, 255, 10+1);
level_img2 = imquantize(img, level_values2);level_values3 = linspace(0, 255, 50+1);
level_img3 = imquantize(img, level_values3);
% 显示结果
subplot(2,2,1), imshow(img), title('Original Image');
subplot(2,2,2), imshow(label2rgb(level_img)), title('3 Levels')
subplot(2,2,3), imshow(label2rgb(level_img2)), title('13 Levels');
subplot(2,2,4), imshow(label2rgb(level_img3)), title('50 Levels');% 灰度变换法
img = imread('D:\MATLAB\work\DIP\Airport.tiff');
N = 256;% 应用红色通道变换
p = (0:N-1)'; % 表示位置
red = zeros(N, 1); % 初始化颜色向量
red(1:N/2) = linspace(1, 0, N/2); 
red = interp1(p, red, double(img), 'linear');
% 绿色通道变换
green = zeros(N, 1); % 初始化颜色向量
green(1:N/2) = linspace(0, 1, N/2); 
green(N/2+1:end) = linspace(1, 0, N/2); 
green = interp1(p, green, double(img), 'linear');
% 蓝色通道变换
blue = zeros(N, 1); % 初始化颜色向量
blue(N/2+1:end) = linspace(0, 1, N/2); 
blue = interp1(p, blue, double(img), 'linear');
% 合并通道
Img= cat(3, red, green, blue);
% 显示灰度变换结果
figure;
imshow(Img), title('灰度变换法');

3、图像分析

(1)Matlab 内建函数实现灰度分层法,分别显示将灰度图像3层、10层和50层后的结果:

(2)使用灰度变换法:

        从代码和生成图像效果可以看出:对于灰度变换法,代码步骤简易,容易实现,matlab的计算量小,效率高。可以针对不同图像进行灰度变换,具有较高的灵活性。但是它对噪声敏感,图片可能会放大噪声。而且明显看出经过处理的图像整体亮度展现出效果不够好,无法很好地处理整体偏暗或偏亮的图像。原图中的局部明亮处无法有效处理。

        对于灰度分层法:整体效果较好,对噪声不是很敏感可以有效抑制噪声。与前者相比,后者的对整体亮度变化比较敏感,可以较好地处理整体偏暗或偏亮的图像。可以有效处理局部亮度不均匀的图像。但是所需要的计算量较大。使用matlab函数对分成阈值有明显要求超过20,要对图像进行阈值划分不够灵活。

4、讨论

1)如果灰度变换法中使用以上变换函数的输出图像质量不佳,如何增强灰度变换法的输出图像效果,使得输出图像细节能够更好地被突出出来?根据什么方面进行适当调整和更改?

        如果使用常见的灰度变换函数(线性变换)得到的输出图像质量不佳,可以从以下几个方面进行调整和改进,以增强灰度变换法的输出图像效果:

        选择更合适的灰度变换函数:可以尝试使用更复杂的灰度变换函数,如分段线性函数、分段指数函数等或者也可以参考一些经典的灰度变换算法,如直方图均衡化、CLAHE(对比度受限的自适应直方图均衡化)等。

        优化灰度变换函数的参数:对于给定的灰度变换函数,可以通过调整函数的参数(如斜率、指数等)来优化输出图像的效果。可以采用一些优化算法(如网格搜索、遗传算法等)来寻找最佳参数。

        考虑图像的局部特性:对于局部亮度不均匀的图像,可以采用分块处理的方式,对不同区域应用不同的灰度变换。这样可以更好地适应图像的局部特性,增强细节信息的表现。

        结合其他图像增强技术:可以将灰度变换法与其他图像增强技术(如空间滤波、直方图处理等)进行组合,发挥各自的优势。

八、图像压缩编码

1、理论基础

(1)如下两信源的霍夫曼编码方案及编码效率,比较其信息熵和编码效率。

(2)设某一幅图像共有8个灰度级,各灰度级出现的概率为

P1=0.4, P2=0.18, P3=0.1, P4=0.1, P3=0.07, P6=0.06, P7=0.05, P8=0.04

试对此图像进行Shannon-Fanon编码,并计算平均码长,信息熵和编码效率。

(3)DCT变换压缩编码

        a、使用Matlab相关函数,对图像’cameraman.tif’进行8×8 DCT变换,分别计算出在保留3个,10个、16个、32个和64个系数(zigzag scanning)情况下的压缩率。

        b、分别对压缩后的数据进行解压操作,将输出图像的质量和原始图像进行对比,计算PSNR值。

        c、将DCT变换的尺寸改为4×4维度。重复第一步(保留3个、10个和16个系数)和第二步操作。分析变换尺寸的改变对算法运算量和压缩图像质量的影响。

2、代码

P = [0.4, 0.18, 0.1, 0.1, 0.07, 0.06, 0.05, 0.04];
% Shannon-Fano编码
code = cell(length(P),1);
for i = 1:length(P)if i == 1code{i} = '0';elsep = sum(P(1:i-1));q = sum(P(i:end));if p >= qcode{i} = [code{i-1} '0'];elsecode{i} = [code{i-1} '1'];endend
end% 打印编码结果
for i = 1:length(P)fprintf('灰度级 %d 的编码为: %s\n', i, code{i});
end
% 计算平均码长
avg_code_length = 0;
for i = 1:length(P)avg_code_length = avg_code_length + length(code{i}) * P(i);
end
fprintf('平均码长: %.2f\n', avg_code_length);% 计算信息熵
entropy = 0;
for i = 1:length(P)entropy = entropy - P(i) * log2(P(i));
end
fprintf('信息熵: %.2f\n', entropy);% 计算编码效率
efficiency = entropy / avg_code_length;
fprintf('编码效率: %.2f\n', efficiency);
3)clc; clear; close all;
59, 63, 64
];
% 显示原始图像
figure;subplot(2, 3, 1);imshow(img);
title('Original Image');
% 循环处理每个系数数量并显示结果
for i = 1:length(coeffs)% 使用 zigzag 扫描保留指定数量的系数zigzag = blockproc(B, [8 8], @(block_struct) zigzag_can(block_struct.data, zigzag_indices, coeffs(i))); % 执行逆 DCT 变换T = blockproc(zigzag, [8 8], idct);%计算解压缩后图像与原始图像之间的PSNR值psnr_values(i) = psnr(img, T);% 显示压缩后的图像和压缩率subplot(2, 3, i+1);imshow(T);title(['Coefficients: ', num2str(coeffs(i)), ', Compression Ratio: ', num2str(compression_ratio), ', PSNR: ', num2str(psnr_values(i))]);
end
%[4✖4]
img  = imread('D:\MATLAB\work\DIP\cameraman.tif');
img = im2double(img);
% 初始化 DCT 变换矩阵
A = dctmtx(4);
dct = @(block_struct) A * block_struct.data * A';
idct = @(block_struct) A' * block_struct.data * A;
% 对图像进行 8x8 DCT 变换
B = blockproc(img, [4 4], dct);
% 定义要保留的 DCT 系数数量
coeffs = [3, 10, 16];
% Zigzag 扫描的索引
zigzag_indices = [1, 2, 5, 6;3, 4, 7, 10;8, 9, 11, 13;12, 14, 15, 16
];
% 显示原始图像
figure;subplot(1, 4, 1);imshow(img);
title('Original Image');
% 循环处理每个系数数量并显示结果
for i = 1:length(coeffs)% 使用 zigzag 扫描保留指定数量的系数zigzag = blockproc(B, [4 4], @(block_struct) zigzag_can(block_struct.data, zigzag_indices, coeffs(i))); % 执行逆 DCT 变换T = blockproc(zigzag, [4 4], idct);%计算解压缩后图像与原始图像之间的PSNR值psnr_values(i) = psnr(img, T);% 显示压缩后的图像和压缩率subplot(1, 4, i+1);imshow(T);title(['Coefficients: ', num2str(coeffs(i)), ',压缩率: ', num2str(compression_ratio), ', PSNR: ', num2str(psnr_values(i))]);end
function order = zigzag_can(A, indices, num_coeffs)A = A(indices);A(num_coeffs+1:end) = 0;% 将一维向量重新转换为矩阵
order = A;
end

3、图像分析

(1)两信源的霍夫曼编码方案及编码效率,比较其信息熵和编码效率

        从结果得出:信源x1的信息熵为1.882,信源x2的信息熵为2.585。可以得出信息熵越低,表示信源的平均信息量越少,数据的可预测性越高。对于编码效率,信源x1的编码效率为0.99638,而信源x2的编码效率为0.96936。编码效率越接近1,表示使用霍夫曼编码进行数据压缩时的效果越好,即数据压缩得越充分。

        综合来看,信源x1相较于信源x2具有更低的信息熵和更高的编码效率,这意味着信源x1的数据具有更高的可预测性,并且在使用霍夫曼编码进行数据压缩时能够取得更好的效果。

(2)某图像共有8个灰度级的Shannon-Fanon编码、平均码长、信息熵和编码效率:

(3)DCT变换压缩编码使用Matlab相关函数,对图像DCT并显示PSNR值变换:
将DCT变换的尺寸[4 4]:
从(1)、(2)变换后的出来的图像可以看出:变换尺寸的改变会影响算法的运算量和压缩图像质量。同样是对16个系数下进行压缩,但是会发现(1)得出的PSNR明显比(2)大,与原图像相似程度会更大,所以大尺度便会提高压缩图像的质量,但是这会对算法的运算量增大。通过对于较小的变换尺寸:使用较小的变换尺寸可能会导致信息丢失,特别是在高频部分,从而降低压缩图像的质量。这可能会导致图像出现块状伪影或失真。但是对于较大的变换尺寸:使用较大的变换尺寸通常可以更好地保留图像细节,因为更多的DCT系数可以捕捉图像中的更多信息,从而提高压缩图像的质量。

http://www.dtcms.com/a/350393.html

相关文章:

  • 面向机器人推动与抓取任务自适应算法研究
  • langchain的简单应用案例---(2)使用Memory实现一个带记忆的对话机器人
  • 工作记录 2015-10-29
  • 销售额和营业收入的区别在哪?哪个值应该更大一些?
  • 新项目,如何做成本估算?
  • 本地缓存与 Redis 缓存的区别与实际应用
  • 【OpenAI】ChatGPT-4o-latest 真正的多模态、长文本模型的详细介绍+API的使用教程!
  • 2025软件测试面试题(持续更新)
  • 07-JUnit测试
  • ubuntu 卡到登录页面进不去--实测
  • 陪护系统有哪些功能?
  • 高并发内存池(4)-TLS:Thread Local Storage
  • Vue.nextTick讲解
  • kubectl 客户端访问 Kubernetes API Server 不通的原因排查与解决办法
  • 800G时代!全场景光模块矩阵解锁数据中心超高速未来
  • AR眼镜赋能矿业冶金数字化转型
  • Wireshark笔记-DHCP流程与数据包解析
  • Linux驱动开发笔记(七)——并发与竞争(上)——原子操作
  • SQLite 全面指南与常用操作
  • 没有AI背景的团队如何快速进行AI开发
  • expdp导出dmp到本地
  • docker 安装配置 redis
  • PDF处理控件Spire.PDF系列教程:在 C# 中实现 PDF 与字节数组的互转
  • 2025年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • synchronized关键字的底层原理
  • 蘑兔音乐:创作好搭子
  • 嵌入式C语言进阶:深入理解sizeof操作符的精妙用法
  • 隧道监测实训模型
  • 讲解 JavaScript 中的深拷贝和浅拷贝
  • PyPI 是什么?