【问题标题】:How to resize an image by adding extra pixels using matlab如何通过使用matlab添加额外像素来调整图像大小
【发布时间】:2016-07-28 20:15:08
【问题描述】:

我想将 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;

但我认为这是一个冗长的,输出也不如预期。谁能建议我用一段更好的代码来执行此操作。提前谢谢你。

【问题讨论】:

    标签: image matlab resize pixels


    【解决方案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), :);
    

    更新

    如果您希望其他值是 other 而不是零,则可以将矩阵初始化为 那个值

    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;
    

    【讨论】:

    • 哦,谢谢@suever!但是如何将这些额外的像素更改为 0-255 范围内的其他值,而不是简单地为零。你也可以试试。
    • @lakshmisai 更新了如何执行此操作的示例。
    • @suever我可以为所有额外的像素分配一些不同的随机值而不是单个值吗?反正我刚才查过了。它以我需要的方式完美运行。非常感谢:)
    • @lakshmisai 如果您只是将所有要求添加到您的问题中,而不是将它们一一串起来,会容易得多。这对那些放弃时间来帮助你的人有点不公平。
    • 完美!再次感谢@Suever。你让我的任务变得简单多了。祝你有美好的一天。
    猜你喜欢
    • 2013-02-12
    • 2014-07-15
    • 1970-01-01
    • 2013-07-04
    • 2012-12-18
    • 1970-01-01
    • 2011-06-13
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多