看板 MATLAB 關於我們 聯絡資訊
想請問,現在有個 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 想問各位大大有沒有不要用迴圈的寫法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.99 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1451892783.A.75C.html
celestialgod: http://pastebin.com/sTieXbdU 01/04 15:56
感謝c大,我之前一直想要repmat,卻一點頭緒也沒有! ※ 編輯: andgitisaac (140.112.25.99), 01/04/2016 16:17:14
sunev: 迴圈只有三次的話,其實也不會慢到哪裡去 01/04 18:42
其實最初原因也不是因為慢啦,只是覺得有點難看,不過C大寫法倒也增加一點點速度,這對現在在弄得即時影像處理,多一點都好啊QQ ※ 編輯: andgitisaac (219.84.240.217), 01/04/2016 22:47:35
sunev: 真的要求效能,可以用內建profile功能找瓶頸。 01/05 04:41
sunev: 你的index應該是find過的,搞不好差在這裡? 01/05 04:43
sunev: light=repmat(HSV(HSV(:,:,1)>0,1),[1 1 3]); 01/05 04:46
sunev: 不過用matlab做即時會不會太拼了 01/05 04:46
celestialgod: s大,你這樣1~3維都一樣喔 01/05 09:20
sunev: 搞錯了,其實語法就錯了...XD 01/05 10:07
sunev: light=bsxfun(@(x,y)x.*(y>0),HSV,HSV(:,:,1)); 01/05 10:08
sunev: 不確定會不會比樓上的寫法快就是了 01/05 10:09
sunev: 我的意思是,如果已經到了要從這種地方擠效能的程度 01/05 10:10
sunev: 那matlab可能不太適合 01/05 10:10
celestialgod: s大寫出我想寫的東西了XDD,不過那樣出來不是3維 01/05 10:29
celestialgod: 矩陣,要在用cat,速度會更慢而已 01/05 10:29
celestialgod: 沒事,我誤會了QQ,S大是對的 01/05 10:30
celestialgod: bsxfun用的很漂亮 01/05 10:30
QQ感謝各位的幫忙 因為由於另外一門課接觸Matlab 剛好生醫要寫專題 就順便拿來用了 該去學學bsxfun惹 ※ 編輯: andgitisaac (140.112.25.99), 01/11/2016 16:36:35