Interpolating a zoomed in colorscale image in Matlab

  • Context: MATLAB 
  • Thread starter Thread starter RMZ
  • Start date Start date
  • Tags Tags
    Image Matlab
Click For Summary
SUMMARY

The discussion focuses on interpolating a zoomed-in color scale image using MATLAB. The user encountered issues displaying the final 3D matrix of the interpolated image, despite successfully interpolating pixel values. The solution involved converting the interpolated data to uint8 format before using the imagesc function for display. Additionally, the use of imshow with floating-point arrays and applying colormaps such as jet was highlighted as effective for visualizing the data.

PREREQUISITES
  • Proficiency in MATLAB programming
  • Understanding of image processing concepts
  • Familiarity with interpolation techniques, specifically interp2
  • Knowledge of data types in MATLAB, particularly uint8
NEXT STEPS
  • Learn advanced image processing techniques in MATLAB
  • Explore the interp2 function in detail for different interpolation methods
  • Research the use of colormaps in MATLAB for data visualization
  • Investigate the caxis function for controlling color scaling in plots
USEFUL FOR

Image processing engineers, MATLAB users, and anyone involved in enhancing image quality through interpolation techniques.

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: 656
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

Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 4 ·
Replies
4
Views
4K
Replies
1
Views
8K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 1 ·
Replies
1
Views
6K