Scale up an image without interpolation
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Valentin Magidson
il 6 Gen 2016
Commentato: Patryk Trybalski
il 7 Giu 2021
I have 3D image, which I need to scale up with integer scaling coefficient (e.g. x3, x5). ImageJ have an interpolation option "None", alongside with "Bilinear" and "Bicubic", but Matlab functions (like resize, imresize) do not include "none" option. It is useful for overlaying high resolution image over original low resolution one. I need to replace each voxel with a volume of identical value pixels. Can I do something smarter then nested FOR loops?
0 Commenti
Risposta accettata
Image Analyst
il 6 Gen 2016
The option is not called 'none', it's called 'nearest'. This will basically replicate voxels, not interpolate them. I'm sure your ImageJ is doing it the same way.
bigArray = imresize(smallArray, 3.456, 'nearest');
2 Commenti
Più risposte (1)
Adam
il 6 Gen 2016
Modificato: Adam
il 6 Gen 2016
Something like this should work I think, with a single for loop. I'm not sure if it could be done without a for loop at all. Probably some combination of repmat and reshape may work to do the whole thing at once rather than a row at a time.
scaleFactor = 3;
inputImage = rand( 3, 4 );
outputImage = zeros( size( inputImage ) * scaleFactor );
nOutputColumns = size( outputImage, 2 );
outputRowIndices = 1:scaleFactor:size( outputImage, 1 );
for i = 1:size( inputImage, 1 )
idx = outputRowIndices(i);
outputImage( idx:idx+2, : ) = reshape( repmat( inputImage(i,:), scaleFactor^2 , 1 ), scaleFactor, nOutputColumns );
end
0 Commenti
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!