2017-06-01 3 views
-1

derzeit habe ich Mühe, eine Lösung zu erstellen, um ein Bild (Farbe und Graustufen) mit interp1() in MATLAB zu skalieren. Ich habe überall gesucht, aber die einzige Lösung, die ich gefunden habe, ist interp2() zu verwenden, was ich nicht kann. Ich habe jetzt seit fast 3 Tagen versucht und recherchiert, aber nichts hilft. Vielen Dank im Voraus.Bildinterpolation in MATLAB beinhaltet interp1

+1

Warum können Sie nicht _interp2_? –

+0

Ich verstehe, dass es für mich einfacher ist, interp2 zu verwenden, aber in dieser Frage kann ich nur interp1 verwenden. –

+0

Ich habe mir diesen [Beitrag] (https://stackoverflow.com/questions/6183155/resizing-an-image-in-matlab) angesehen und versucht, darauf zu verweisen, aber etwas ist immer noch falsch oder fehlt. –

Antwort

0

Da Sie interp1 streng verwenden, können Sie folgendermaßen vorgehen. Interpolation basierend auf globalen Indizes durchführen.

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

vielen Dank @siva Requisiten an Sie Mann :) Ich werde dies untersuchen. –

+0

Was ist, wenn ich die Größe des Bildes vergrößern möchte? –

0

Sie können einige Zeilen und Spalten überspringen, wenn Sie nicht interpoliert sind.

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

Und auch, können Sie einen Blick in imresize haben.

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

Ich muss interp1() in diesem Problem verwenden und impresize() darf in diesem Fall nicht verwendet werden. Danke im Voraus. –