Multiply Image Pixels by a Matrix
显示 更早的评论
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 个评论
Sean de Wolski
2012-8-22
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
2012-8-22
Royi Avital
2012-8-23
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Video Formats and Interfaces 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!