因此,我尝试使用嵌套的for循环对图像进行降采样。在这里,我有一个359x479(widthxheight)图像。我正在尝试通过删除偶数行和列将其降采样为180x240图像。但是,它似乎没有用。我最终得到与输出相同的图像。
a=imread('w.jpg'); %input image
a=im2double(a); %convert it to double
r=[[1 1 1];[1 1 1];[1 1 1]]/9; % the next 3 steps done to low pass
filter the image
c=imfilter(a,r,'replicate');
imshow(c);
for i=1:359 % for rows
for j=1:479 %for columns
if(mod(i,2)~=0) %to remove even rows
if(mod(j,2)~=0) %to remove odd columns
b(i,j)=c(i,j); %if i and j are odd, the pixel value is assigned to b
end
end
end
end
figure, imshow(b);
应该获得180x240的图像,但仍获得相同的尺寸为359x479的图像
答案 0 :(得分:1)
您还需要在两个像素上仅分配一个像素!否则,一半的列/行将仅包含0值。
所以您需要使用:
b(ceil(i/2),ceil(j/2))=c(i,j);
其中2对应于模的值。
您还可以通过简单地编写以下代码来避免使用某些循环:
b = c(1:2:259,1:2:194);