Interpolating a zoomed in colorscale image in Matlab

  • Context: MATLAB 
  • Thread starter Thread starter RMZ
  • Start date Start date
  • Tags Tags
    Image Matlab
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
RMZ
Messages
29
Reaction score
0
I have no idea what I am doing wrong. I have already found multiple places on the internet which give clear examples of how to do this, yet I am still struggling. Please help me out, or at least point me somewhere. My code is below. I am trying to interpolate pixels of a full color image. The only issue I am having is to display the final 3D matrix representing (what should be) a much clearer version of the original low quality image. During my troubleshooting, I tried displaying individual channels, yet was unable to (almost the entire image shows up as either red, green, or blue depending on which channel I attempted to display). However, displaying individual channels as 2D matrices (e.g. imagesc(newData(:, :, 1)) ) works albeit with an odd set of colors. I have verified in my workspace that the image pixels are being interpolated properly. The image I have been working with is attached.

function I am = displayRGB(filename)
%obtain original picture and zoomed picture information
imData = imread(filename);
zoomData = imData(200:300,200:300,:);

%creating a grid corresponding to existing pixel values, as
% well as for pixel values to be interpolated
[height,width,dimension] = size(imData);
X = 1:width;
Y = 1:height;
[X0,Y0] = meshgrid(X,Y);
[X1,Y1] = meshgrid(200:.25:300,200:.25:300);

%interpolate each channel
newData = zeros(401,401,3);
newData(:,:,1) = interp2(X0,Y0,double(imData(:,:,1)),X1,Y1,'cubic');
newData(:,:,2) = interp2(X0,Y0,double(imData(:,:,2)),X1,Y1,'cubic');
newData(:,:,3) = interp2(X0,Y0,double(imData(:,:,3)),X1,Y1,'cubic');

%display the image
figure; imagesc(zoomData) %original zoomed image
figure; imagesc(newData) %clearer image
 

Attachments

  • lab7_3.jpg
    lab7_3.jpg
    64.1 KB · Views: 672
Last edited:
Physics news on Phys.org
Found it... apparently I needed to use newData = uint8(newData) before doing imagesc(newData). Not sure why at the moment (I had already tried using floor and ceiling functions to change the newData array values to integers).
 
You could cast it to uin8 but you don't need to if you don't want to. You can use colormaps with floating point arrays. Just use

Code:
imshow(yourDoubleArray, []);
colormap(jet(256)); % Or whatever colormap you want
colorbar;

You can mess around with caxis() if you want to apply the colormap to only a certain range of your data.