matlab - 2-DCT图像压缩matlab
问题描述
问题:
我尝试使用 matlab 实现离散余弦变换压缩。输入图像将是大小为 512 X 512 的 jpg 图像 (Lena)。
有两个阶段,即压缩和解压缩。
压缩和量化:
输入图像被转换为 YCbCr 分量。然后采用 Y 分量进行压缩。进一步的 DCT 将被量化。
量化和解压缩:
对量化后的图像进行去量化以进行解压缩。
问题:
在图像的解压缩版本中发现了矩形框。代码有什么问题吗?为了您的推断,下面是示例输入和输出图像,然后是 matlab 代码。
输入图像:
YCbCr 中的 Y 分量:
输出图像:
代码:
clc;
clear all;
close all;
I = imread('lena512.jpg');
figure, imshow(I);
% Y = I;
YCbCr = rgb2ycbcr(I);
figure, imshow(YCbCr);
Y = YCbCr(:,:, 1);
figure, imshow(Y);
[h, w] = size(Y);
r = h/8;
c = w/8;
s = 1;
q50 = [16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 98 112 100 103 99];
% COMPRESSION
for i=1:r
e = 1;
for j=1:c
block = Y(s:s+7,e:e+7);
cent = double(block) - 128;
for m=1:8
for n=1:8
if m == 1
u = 1/sqrt(8);
else
u = sqrt(2/8);
end
if n == 1
v = 1/sqrt(8);
else
v = sqrt(2/8);
end
comp = 0;
for x=1:8
for y=1:8
comp = comp + cent(x, y)*(cos((((2*(x-1))+1)*(m-1)*pi)/16))*(cos((((2*(y-1))+1)*(n-1)*pi)/16));
end
end
F(m, n) = v*u*comp;
end
end
for x=1:8
for y=1:8
cq(x, y) = round(F(x, y)/q50(x, y));
end
end
Q(s:s+7,e:e+7) = cq;
e = e + 8;
end
s = s + 8;
end
% % % % % % % % % % % % % % %
% % DECOMPRESSION
% % % % % % %
s = 1;
for i=1:r
e = 1;
for j=1:c
cq = Q(s:s+7,e:e+7);
for x=1:8
for y=1:8
DQ(x, y) = q50(x, y)*cq(x, y);
end
end
for m=1:8
for n=1:8
if m == 1
u = 1/sqrt(8);
else
u = sqrt(2/8);
end
if n == 1
v = 1/sqrt(8);
else
v = sqrt(2/8);
end
comp = 0;
for x=1:8
for y=1:8
comp = comp + u*v*DQ(x, y)*(cos((((2*(x-1))+1)*(m-1)*pi)/16))*(cos((((2*(y-1))+1)*(n-1)*pi)/16));
end
end
bf(m, n) = round(comp)+128;
end
end
Org(s:s+7,e:e+7) = bf;
e = e + 8;
end
s = s + 8;
end
imwrite(Y, 'F:\workouts\phd\jpeg\input.jpg');
imwrite(uint8(Org), 'F:\workouts\phd\jpeg\output.jpg');
return;
你能告诉我错误在哪里吗?这会很有帮助。
解决方案
推荐阅读
- python - Python总线错误破坏python环境
- firebase - timestampsInSnapshots 设置现在默认为 true,您不再需要显式设置它
- python - 与分析用户一起在 Python 上使用 GoogleSearch?
- javascript - 在laravel中的razorpay响应后缺少Route所需的参数
- html - 什么是弯曲对齐左右两个项目的最佳方法
- aspnetboilerplate - Aspnetboilerplate AbpEntities 的外部 POCO 类。即不可能继承
- php - 砍掉一个名字,Magento 2 小部件
- apache-spark - Pyspark:将缺失值处理为空字符串
- deployment - 使用 Jaeger 代理的优势
- c# - 禁用 Application Insights Cookie