Interpolating a zoomed in colorscale image in Matlab

  • MATLAB
  • Thread starter RMZ
  • Start date
  • #1
RMZ
29
0

Main Question or Discussion Point

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
 

Attachments

Last edited:

Answers and Replies

  • #2
RMZ
29
0
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).
 
  • #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:
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.
 

Related Threads on Interpolating a zoomed in colorscale image in Matlab

  • Last Post
Replies
0
Views
7K
Replies
4
Views
4K
  • Last Post
Replies
0
Views
5K
  • Last Post
Replies
9
Views
34K
Replies
1
Views
2K
Replies
1
Views
12K
Replies
5
Views
2K
Replies
1
Views
6K
Top