🌓
搜索
 找回密码
 立即注册

在matlab执行jpeg图像压缩中怎么把图片分割成8*8的像素块? ...

戳你一嘢 2022-10-7 11:46:37 76045
假设I是图像矩阵(二维的,黑白图像)
I(i-7:i,j-7:j)即为以I(i-7,j-7)为第一个元素的8*8矩阵。
再利用for循环就可以把i分成8*8的像素块。
<hr>接触matlab不到一年,代码有很多不完善的地方,不要盲信。
相关代码如下:
I=imread('test.bmp');%先把图像补成行数和列数均为8的倍数的矩阵[m,n]=size(I);%求出图像矩阵的大小m2=m;n2=n;size_pic=[m2 n2];m1=8-mod(m,8);n1=8-mod(n,8);I_m=(zeros(m1,n));I=[I;I_m];%将行数补成8的整数倍I_n=zeros(m+m1,n1);I=[I I_n];%将列数补成8的整数倍%将矩阵分成8*8的子矩阵,并存入subim里[m,n]=size(I);%求出补全后图像矩阵的大小num=1;for i=8:8:m    for j=8:8:n        subim(:,:,num)=int16(I(i-7:i,j-7:j));        num=num+1;    endend

扫一扫

1 回复

JPEG标准里面使用了DCT变换,这个我就详细解释了,总而言之是需要使用矩阵乘法。8*8的最终决定是出于对压缩速度和解压速度的妥协,矩阵相乘嘛,,,都懂的,长宽加一点计算量成倍提高,而且这个标准的制定在几十年前,那个时候普通计算机的计算能力你懂的,要是开一个图片等半天你还会等吗?
加上如果分割再大一点,在后面量化的时候,由于dct系数的极差加大,可能还要遇到一些其他的问题,会影响成像质量
至于最后为啥选择了8*8,是有一张表显示的,那张图我没存,总之是经过研究后决定的,不是随随便便选的,这是一个综合的考虑。
高级模式
游客
返回顶部