- #1
RMZ
- 29
- 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
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
Last edited: