[討論] 選擇性複製三維矩陣(不用迴圈)

作者: 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