【问题标题】:Zoom and Crop Image (Matrix)缩放和裁剪图像(矩阵)
【发布时间】:2015-04-20 07:41:57
【问题描述】:

我有 2 个关于图像缩放和裁剪的问题。

1) 放大图像,使图像的高度和宽度都增加一倍,并且矩阵中的每个像素都被复制为 4 个像素。想知道这是否可以在不使用任何循环或插值以及函数 imresize 的情况下完成。

2) 通过选择图像的特定区域,然后将其裁剪到特定的长度和高度来裁剪矩阵。同样,我想知道如何在不使用任何循环或插值以及函数 imresize 的情况下实现这一点。也许通过从矩阵中删除特定的列和行?

任何有关如何为这些创建函数的帮助将不胜感激。 :)

【问题讨论】:

    标签: matlab image-processing matrix zooming crop


    【解决方案1】:

    让我们一次一个地回答每个问题。

    问题 #1

    您的问题陈述说您想要放大,但您所描述的是简单的调整大小。我要两个都做。

    首先,您要寻找的是像素复制。最简单的做法是声明一个两倍于输入图像大小的输出图像,然后编写代码,将每个输入像素复制到输出,然后将其复制到右下角和右下角。例如,使用 MATLAB 系统路径中的 onion.png,您可以:

    im = imread('onion.png');
    rows = size(im,1);
    cols = size(im,2);
    out = zeros(2*rows, 2*cols, size(im,3), class(im));
    out(1:2:end,1:2:end,:) = im; %// Left
    out(2:2:end,1:2:end,:) = im; %// Bottom
    out(1:2:end,2:2:end,:) = im; %// Right
    out(2:2:end,2:2:end,:) = im; %// Bottom-Right
    

    请注意,我们对数组进行索引的方式是跳过一个像素,并且起始位置会根据您要复制像素的位置而改变。

    这是原图:

    这是最终结果:

    顺便说一句,通常当您增加图像的大小时,您正在上采样,您通常对结果进行低通滤波以执行anti-aliasing

    现在,如果您想放大某个部分,您所要做的就是从上采样图像中选择一个您想要的部分并进行裁剪。这就引出了你的下一个问题。

    问题 #2

    这可以简单地通过索引来完成。给定要提取的左上角的行和列位置,以及要裁剪的内容的宽度和高度,您只需执行此操作。 rc 是左上角的行和列,wh 是裁剪结果的宽度和高度:

    out = im(r:r+h-1, c:c+w-1,:);
    

    假设(r,c) = (50,50)(w,h) = (50,50)。对于我们的onion.png 图像,我们得到:

    r = 50; c = 50;
    h = 50; w = 50;
    out = im(r:r+h-1, c:c+w-1,:);
    

    如果您想将裁剪后的图像放置在原始图像中的另一个位置,您只需重复上述过程,但输出将分配到原始图像中的位置。鉴于 r2c2 是您要将图像保存到原始图像的左上角,请执行以下操作:

    im(r2:r2+h-1, c2:c2+w-1, :) = out;
    

    【讨论】:

    • 您好 rayryeng,您对这两个问题的两种方式都对我的问题有所帮助并成功回答了我的问题,非常感谢!
    • 你好,rayryeng,我正在尝试将数字 2 放入像这样的作物(图像,上角,高度_宽度)这样的函数中,到目前为止我有这个:函数输出 = 作物(图像,上角,高度宽度) [r, c] = (上角); [h, w] = (height_width);输出 = 图像(r:r+h,c:c+w);我的问题是我试图使上角等于两个我可以使用的值,但是我的代码一直给我一个错误,我觉得它与第二行和第三行代码有关。任何有关如何克服这个问题的帮助将不胜感激!
    • @RohanNair - MATLAB 不支持 tuple 赋值。为了方便,我就这么写了。您需要自己显式分配每个值。例如r = 50; c = 50; w = 50; h = 50;.
    • @RohanNair - 我更新了我的帖子,明确说明您应该如何使用裁剪代码。
    • 最后一个问题,如果我要将裁剪后的图像粘贴到指定位置的原始图像上,我将如何处理?感谢您的宝贵时间!
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2016-08-29
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多