[讨论] 选择性复制三维矩阵(不用循环)

楼主: andgitisaac (AndGiTiSaaC)   2016-01-04 15:33:01
想请问,现在有个 m*n*3 三维矩阵HSV,要做影像处理
目标是
如果HSV(:,:,1)元素的值大于门槛,那就把该x、y位置
的矩阵值给复制到另一个三维矩阵light(三层都要复制)
目前我的写法是:
(index 是符合门槛值的 元素位置)
light = zeros(m,n,3);
for k = 0:2
light(index + k*m*n) = HSV(index + k*m*n);
end
想问各位大大有没有不要用循环的写法?
作者: celestialgod (天)   2016-01-04 15:56:00
作者: sunev (Veritas)   2016-01-04 18:42:00
循环只有三次的话,其实也不会慢到哪里去真的要求效能,可以用内建profile功能找瓶颈。你的index应该是find过的,搞不好差在这里?light=repmat(HSV(HSV(:,:,1)>0,1),[1 1 3]);不过用matlab做即时会不会太拼了
作者: celestialgod (天)   2016-01-05 09:20:00
s大,你这样1~3维都一样喔
作者: sunev (Veritas)   2016-01-05 10:07:00
搞错了,其实语法就错了...XDlight=bsxfun(@(x,y)x.*(y>0),HSV,HSV(:,:,1));不确定会不会比楼上的写法快就是了我的意思是,如果已经到了要从这种地方挤效能的程度那matlab可能不太适合
作者: celestialgod (天)   2016-01-05 10:29:00
s大写出我想写的东西了XDD,不过那样出来不是3维矩阵,要在用cat,速度会更慢而已没事,我误会了QQ,S大是对的bsxfun用的很漂亮

Links booklink

Contact Us: admin [ a t ] ucptt.com