矢量化循环

时间:2013-06-10 10:19:51

标签: matlab image-processing vectorization

我想优化下面的代码,这只是一个矩阵乘法 - 我敢肯定这可以在不使用循环的情况下完成 - 但我似乎无法将其弄好。

k = [ 76    150    29; ...
     -44   -85    128;  ...
     128   -108   -21];

for i = 1:size(rgb,1)
  for j = 1:size(rgb,2)
    triplet(1:3) = rgb(i,j,:);
    yuv(i,j,:)   = single(triplet) * single(k');
    yuv(i,j,:)   = fix(yuv(i,j,:) ./ 256);
  end
end

有什么想法或建议吗?

对于那些具有图像处理背景的人来说,你会发现上面的代码只是一个RGB到YUV的转换 - 你可能会问我为什么不使用内置的rgb2ycbcr函数 - 但是在这种情况下,我想使用上面概述的8位转换系数。

1 个答案:

答案 0 :(得分:6)

你可以reshape

rgbR = reshape( rgb, [], 3 );
yuvR = single(rgbR) * single( k' );
yuv = reshape( fix( yuvR./ 256 ), size(rgb,1), size(rgb,2), [] );

PS,
最好not to use i and j as variable names in Matlab