在MATLAB中调整图像大小 [英] Resizing an Image in 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屋!