gpt4 book ai didi

matlab - 在 MATLAB 中调整图像大小

转载 作者:行者123 更新时间:2023-12-02 08:54:12 30 4
gpt4 key购买 nike

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

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

我认为我对它的插值非常不正确:/

最佳答案

我有 previously answered关于 scaling images using nearest-neighbor interpolation 的问题,我在那里使用的大部分代码和解释都适用于这里。主要区别在于最后的插值步骤。以下是使用 INTERP2 编写函数的方法并概括为 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 - 在 MATLAB 中调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6183155/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com