Mintavételezés Matlabban

A mintavételezésre nincs külön függvény Matlabban, egy trükkhöz kell folyamodnunk. Használjuk a meshgrid() függvényt, amellyel tetszőleges méretű egyenletesen mintavételezett hálót generálunk a régi képhez és az új képhez is. A meshgrid() függvény a háló csomópontjainak koordinátáit adja vissza egy-egy mátrixban.

>> [X,Y] = meshgrid(1:3,10:14)
X = 1 2 3
    1 2 3
    1 2 3
    1 2 3
    1 2 3

Y = 10 10 10
    11 11 11
    12 12 12
    13 13 13
    14 14 14

Hozzunk létre egy mátrixot az eredeti kép méretével, majd hozzunk létre egy másik mátrixot az új, mintavételezett kép méretével. Ezt követően használjunk egy 2-dimenziós interpolációs módszert a két háló pontjai között úgy, hogy az új kép intenzitásai az eredeti kép intenzitásai alapján lesznek meghatározva (az interpoláció alapján). Az interpolációt a két háló között az interp2() függvény hozza létre.

Az itt bemutatott módszer Omer Demirkaya megoldásának egy változata:

function nimg = myimresample(img, newresXY, interpolation)
    % newresXY is a vector of the rowsize and columnsize
    imgd = im2double(img); % convert intensities into [0;1]
    [r,c,z] = size(img);
    r=r-1;
    c=c-1;
    ops=[1, 1];    % old pixel size
    resample_factor = [r / newresXY(1) , c / newresXY(2) ];
    nps=ops .* resample_factor  % new pixel size
    old_center = ops/2;
    new_center = nps / 2;   
    [Ox,Oy] = meshgrid(old_center(1):ops(1):c*ops(1)+old_center(1),  old_center(2):ops(2):r*ops(2)+old_center(2));
    [Nx,Ny] = meshgrid(new_center(1):nps(1):c*ops(1)+new_center(1),  new_center(2):nps(2):r*ops(2)+new_center(2));
    for i=1:z
         nimg(:,:,i) = interp2(Ox,Oy,imgd(:,:,i),Nx,Ny,interpolation);
    end;
    imshow(nimg);
end

 

Próbáljuk ki a függvényt a kormany_320x213.jpg képre!

 

>>  img = imread('kormany_320x213.jpg');
>>  nimg_a = myimresample(img, [107,160], 'nearest');
>>  nimg_b = myimresample(img, [107,160], 'linear');
>>  nimg_c = myimresample(img, [107,160], 'pchip');  % Octave-ban, Matlabban 'cubic'
>>  nimg_d = myimresample(img, [107,160], 'spline');

Legközelebbi szomszéd Lineáris
Köbös Hermit interpoláció Spline