Multiply Image Pixels by a Matrix
Show older comments
Hello, Let's say I have a 3 channel image M -> [numRowx * numColumns * numChannels]. I also have a 3 by 3 matrix A (Color Conbersion).
I would like to multiply each pixel 3 channel by the matrix to have a new 3 channels pixel.
How would you do that the most efficient way without writing the actual formula by hand (Multiplying each channel of the image by a row)?
My best so far is:
rgbToYPbPrMat = [0.299, 0.587, 0.144; 0.5, -0.419, -0.081; -0.169, -0.331, 0.5];
yPbPrToRgbMat = inv(rgbToYPbPrMat);
inputImage = randi([0, 255], [256, 256, 3], 'uint8');
inputImageFP = double(inputImage) / 255; %<! Floating Point
figure;
image(inputImage);
axis image;
inputImageYPbPrFP = shiftdim(reshape((rgbToYPbPrMat * reshape(shiftdim(inputImageFP, 2), [3, (256 * 256)])), [3, 256, 256]), 1);
Thanks.
3 Comments
Sean de Wolski
on 22 Aug 2012
I smell bsxfun. Please provide a small example with a sample image we have and a a 3x3 matrix. What would you expect as the result?
Royi Avital
on 22 Aug 2012
Royi Avital
on 23 Aug 2012
Accepted Answer
More Answers (0)
Categories
Find more on Mathematics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!