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