2

我想优化以下代码,这只是一个矩阵乘法——我确信这可以在不使用循环的情况下完成——但我似乎不太能做到。

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 位转换系数。

4

1 回答 1

6

你可以reshape

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

PS,
最好不要在 Matlab中使用iandj作为变量名。

于 2013-06-10T10:34:26.180 回答