关于使用我自己的代码来调整图像大小

时间:2013-10-25 11:33:42

标签: matlab matlab-figure

当我尝试通过计算平均4个像素来调整图像大小来获得一个像素时,我遇到了问题,以下是我的代码,请帮助我,这让我发疯了

a=imread('c:\black and white.jpg');
[rows,columns,phases]=size(a);
i=1;j=1;k=1;
c=zeros(rows/2,columns/2,phases);
c=uint8(c);
for x=1:2:rows-1;
    for y=1:2:columns;
        for z=1:phases;
        c(i,j,k)=1/4*(a(x,y,z)+a(x,y+1,z)+a(x+1,y,z)+a(x+1,y+1,z));
        k=k+1;
        end
    j=j+1;
    k=1;
    end
    i=i+1;
    j=1;
    k=1;
end
figure, imshow(a)
figure, imshow(c)

2 个答案:

答案 0 :(得分:1)

你可以在没有循环的情况下,通过计算每列的块平均值,然后调整每一行,如下所示。

我假设您的数据是图像,即2D数组。如果你有一个3D阵列,其中有三个图像沿着第三维堆积(似乎在你的代码中),只需将它应用于每个图像(即,对于第三个索引的每个值)。

矩阵大小和块大小是任意的,只要块大小除以输入矩阵a的行数和列数。

a = rand(100,120); % example data
n = 2; % block size
m = size(a)/n; % assumed to be integer
c = reshape(mean(reshape(a,n,[])),m(1),[]).'; % mean by colummns in groups of n
c = reshape(mean(reshape(c,n,[])),m(2),[]).'; % mean by rows in groups of n

答案 1 :(得分:0)

假设您有一个名为myImage的图像:

,也许您的问题就像这样简单

首先确保每个方向的像素数均为

myImage = myImage(1:fix(end/2)*2,1:fix(end/2)*2)

然后取每个4像素的平均值

(myImage(1:2:end,1:2:end)+myImage(2:2:end,1:2:end)+ ...
myImage(1:2:end,2:2:end)+myImage(2:2:end,2:2:end))/4

请注意,这假设您不介意丢失最后一行或一列像素,否则您需要做更聪明的事情。