我想将512X512图像调整为363X762图像,这将大于原始图像(大小为512X512)。那些额外的像素值必须是0-255范围内的不同值。 我尝试了以下代码:
I=imread('photo.jpg'); %photo.jpg is a 512X512 image
B=zeros(363,726);
sizeOfMatrixB=size(B);
display(sizeOfMatrixB);
B(1:262144)=I(1:262144);
imshow(B);
B(262155:263538)=0;
但我认为这是一个冗长的,输出也不是那么理想。任何人都可以建议我用更好的代码来执行此操作。提前谢谢。
答案 0 :(得分:1)
我认为你拥有的代码实际上非常接近理想,除非你有很多硬编码值。那些应该真正计算在内。我们可以使用numel
来计算B
中的元素数量。
B = zeros(363, 726);
%// Assign the first 262144 elements of B to the values in I
%// all of the rest will remain as 0
B(1:numel(I)) = I;
这种灵活性很重要,实际上通过最后一行的拼写错误证明了重要性:
B(262155:263538)=0;
%// Should be
B(262144:263538)=0;
另外,最后你不需要将这些额外的赋值归零,因为你首先将矩阵初始化为全零。
附注
看起来您正在跨多列传播每列的原始图像数据。我猜这不是你想要的。您可能只想抓住I
的前{363} 行。B
。你可以这样做:
B = zeros(363, 726);
B(1:size(B, 1), 1:size(I, 2)) = I(1:size(B, 1), :);
<强>更新强>
如果您希望其他值为其他而不是零,则可以将矩阵初始化为该值。
value = 2;
B = zeros(363, 726) + value;
B(1:numel(I)) = I;
如果您希望它们是0到255之间的随机整数,请使用randi
初始化矩阵。
B = randi([0 255], 363, 726);
B(1:numel(I)) = I;