Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Interpolating a zoomed in colorscale image in Matlab

  1. Jun 12, 2016 #1


    User Avatar

    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 im = 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

    Attached Files:

    Last edited: Jun 12, 2016
  2. jcsd
  3. Jun 13, 2016 #2


    User Avatar

    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).
  4. Jul 10, 2016 #3
    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 (Text):
    imshow(yourDoubleArray, []);
    colormap(jet(256)); % Or whatever colormap you want
    You can mess around with caxis() if you want to apply the colormap to only a certain range of your data.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted