2017-06-01 32 views
-1

目前我正在努力创建一个解决方案,以在MATLAB中使用interp1()调整图像大小(颜色和灰度)。我到处寻找,但我发现的唯一解决方案是使用interp2(),这是我不能。我一直在尝试和研究近3天,但没有任何帮助。先谢谢你。MATLAB中的图像插值涉及interp1

+1

为什么你不能_interp2_? –

+0

我知道使用interp2比较容易,但在这个问题中,我只能使用interp1。 –

+0

我一直在看这[帖子](https://stackoverflow.com/questions/6183155/resizing-an-image-in-matlab)并试图引用它,但仍有错误或丢失。 –

回答

0

由于您严格使用interp1 ..您可以按照以下步骤操作。根据全局指标进行插值。

I = imread('peppers.png') ; 
[nx,ny,t] = size(I) ; 
%% 
dx = 4 ; dy = 4 ; % see to it that dx and dy are multiples of nx and ny 
%% Global indices 
idx = 1:nx*ny ; 
% for interpolation 
idxi = 1:dx:nx ; idyi = 1:dy:ny ; 
[I1,J1] = meshgrid(idxi,idyi) ; 
idxi = sub2ind([nx,ny],I1,J1)' ; 
%% 
nxi = nx/dx ; nyi = ny/dy ; 
I1 = zeros(nxi,nyi,t) ; 
%% 
for i = 1:t 
    C = I(:,:,i) ; 
    temp = interp1(idx,double(C(:)),idxi(:)) ; 
    I1(:,:,i) = reshape(temp,nxi,nyi) ; 
end 
I1 = uint8(I1) ; 
imshow(I1) 
size(I) 
size(I1) 
+0

非常感谢你@siva道具给你的男人:)我会研究这一点。 –

+0

如果我想增加图像的大小,该怎么办? –

0

如果您反对插值,您可能跳过几行和几列。

I = imread('peppers.png') ; 
size(I) 
I1 = I(1:2:end,1:2:end,:) ; 
size(I1) 

而且也,你可以看看到imresize

I2 = imresize(I,[200 200]) ; 
+0

我必须在这个问题中使用interp1(),并且在这种情况下不能使用imresize()。提前致谢。 –