在MATLAB中调整图像大小 [英] Resizing an Image in MATLAB

查看:1514
本文介绍了在MATLAB中调整图像大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个函数,根据作业作业的值(scale_zoom)缩放图像。我不想在这个函数中使用内置函数 resize()的MATLAB,所以我正在尝试插值。任何帮助将不胜感激。这是我到目前为止:

I'm trying to create a function the scales an image based on a value (scale_zoom) for a homework assignment. I don't want to use the MATLAB built in function resize() in this function so I'm trying to interpolate. Any help would be greatly appreciated. This is what I have so far:

function pic_new=scale_image(pic,scale_zoom)
    [row, col]=size(pic)
    ht_scale=size(pic,1)/scale_zoom*col
    wid_scale=size(pic,2)/scale_zoom*row

    size(ht_scale)
    size(wid_scale)
    x=(0:scale_zoom)*wid_scale
    y=(0:scale_zoom)*ht_scale
    length(x)
    length(y)
    %plotvals=0:0.1:scale_zoom (this is not necessary i think)
    newimg=interp1(pic,x,y,'cubic')
    image(newimg)
end

我认为我插错的方式非常错误:/

I think I'm interpolating it very incorrectly :/

推荐答案

我之前曾已回答有关使用最近邻插值缩放图像的问题,以及我在那里使用的大部分代码和说明应用 这里。主要区别在于最终插值步骤。以下是使用 INTERP2 编写功能的方法,并概括了任何类型的二维灰度或三维RGB图像

I had previously answered a question about scaling images using nearest-neighbor interpolation, and much of the code and explanations I used there apply here. The main difference is the final interpolation step. Here's how you can write your function, using INTERP2 and generalizing for a 2-D grayscale or 3-D RGB image of any type:

function pic_new = scale_image(pic,scale_zoom)

  oldSize = size(pic);                               %# Old image size
  newSize = max(floor(scale_zoom.*oldSize(1:2)),1);  %# New image size
  newX = ((1:newSize(2))-0.5)./scale_zoom+0.5;  %# New image pixel X coordinates
  newY = ((1:newSize(1))-0.5)./scale_zoom+0.5;  %# New image pixel Y coordinates
  oldClass = class(pic);  %# Original image type
  pic = double(pic);      %# Convert image to double precision for interpolation

  if numel(oldSize) == 2  %# Interpolate grayscale image

    pic_new = interp2(pic,newX,newY(:),'cubic');

  else                    %# Interpolate RGB image

    pic_new = zeros([newSize 3]);  %# Initialize new image
    pic_new(:,:,1) = interp2(pic(:,:,1),newX,newY(:),'cubic');  %# Red plane
    pic_new(:,:,2) = interp2(pic(:,:,2),newX,newY(:),'cubic');  %# Green plane
    pic_new(:,:,3) = interp2(pic(:,:,3),newX,newY(:),'cubic');  %# Blue plane

  end

  pic_new = cast(pic_new,oldClass);  %# Convert back to original image type

end

你可以测试如下:

img = imread('peppers.png');      %# Load the sample peppers image
newImage = scale_image(img,0.3);  %# Scale it to 30%

这篇关于在MATLAB中调整图像大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆