函数n-mod(a,m)如8-mod(330,8)在MATLAB上做什么?

函数n-mod(a,m)如8-mod(330,8)在MATLAB上做什么?,matlab,image-compression,Matlab,Image Compression,我真的搞不懂它是干什么的 更具体地说,我正在Matlab上进行图像压缩,我收到了如下代码: X=imread('image1.jpg'); s=size(X); % image1.jpg has size 330 x 220 offset1 = mod(8-mod(s(1),8),8); offset2 = mod(8-mod(s(2),8),8); if offset1 ~= 0 || offset2 ~= 0 X(s(1)+offset1, s(2)+offset2, 3)

我真的搞不懂它是干什么的

更具体地说,我正在Matlab上进行图像压缩,我收到了如下代码:

X=imread('image1.jpg');

s=size(X);      % image1.jpg has size 330 x 220
offset1 = mod(8-mod(s(1),8),8);
offset2 = mod(8-mod(s(2),8),8);
if offset1 ~= 0 || offset2 ~= 0
  X(s(1)+offset1, s(2)+offset2, 3) = 0;
end

figure(1)
image(X);
axis image
axis off

试图找出if语句的作用,但我不知道offset1和offset2指的是什么。

他们试图确定图像大小是否是8的倍数。JPEG图像在内部始终是8的倍数,因为它们是由8x8 DCT块生成的。页眉可以指定较小的尺寸,在这种情况下,只有指定的最左上方部分可见,并且修剪右侧和底部


8-mod(s(1),8)
部分正在计算要达到X大小中8的下一个倍数需要多少字节。外部的
mod(…,8)
只是将“8个字节”的大小写重新折叠为“0个字节”。

我仍然无法理解8-mod(a,m)在数学上的作用。。你能解释一下这部分的数学计算方法吗?@WillSon:模运算是
a/m
的整数余数。请看:我当然知道正则模(即余数)的作用。但是,这个前缀,即8-mod的“8-”部分实际上是做什么的呢?
m-mod(a,m)
告诉您必须添加到
a
中,以便
mod(a,m)==0
谢谢您,这是有意义的。但是,一般来说,如果前缀不等于m怎么办?比如3-mod(31,4)?