MATLAB Interpolating a zoomed in colorscale image in Matlab

  • Thread starter Thread starter RMZ
  • Start date Start date
  • Tags Tags
    Image Matlab
AI Thread Summary
The discussion revolves around troubleshooting issues with displaying a 3D matrix of interpolated pixels from a low-quality image. The user is struggling to visualize the final output correctly, noting that displaying individual color channels results in images dominated by a single color (red, green, or blue). The code provided includes functions for reading an image, creating grids for interpolation, and interpolating each color channel using cubic interpolation. A breakthrough occurs when the user discovers that converting the interpolated data to uint8 format before displaying it with imagesc resolves the display issue. Additional suggestions include using imshow for better visualization of floating-point arrays and applying colormaps for enhanced color representation. The discussion emphasizes the importance of data type conversion in image processing tasks.
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: 627
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.
 

Similar threads

Back
Top