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

看板MATLAB作者 (AndGiTiSaaC)時間9年前發表 (2016/01/04 07:33), 9年前編輯推噓3(3013)
留言16則, 2人參與, 最新討論串1/1
想請問,現在有個 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

01/04 15:56, , 1F
感謝c大,我之前一直想要repmat,卻一點頭緒也沒有! ※ 編輯: andgitisaac (140.112.25.99), 01/04/2016 16:17:14

01/04 18:42, , 2F
迴圈只有三次的話,其實也不會慢到哪裡去
01/04 18:42, 2F
其實最初原因也不是因為慢啦,只是覺得有點難看,不過C大寫法倒也增加一點點速度,這對現在在弄得即時影像處理,多一點都好啊QQ ※ 編輯: andgitisaac (219.84.240.217), 01/04/2016 22:47:35

01/05 04:41, , 3F
真的要求效能,可以用內建profile功能找瓶頸。
01/05 04:41, 3F

01/05 04:43, , 4F
你的index應該是find過的,搞不好差在這裡?
01/05 04:43, 4F

01/05 04:46, , 5F
light=repmat(HSV(HSV(:,:,1)>0,1),[1 1 3]);
01/05 04:46, 5F

01/05 04:46, , 6F
不過用matlab做即時會不會太拼了
01/05 04:46, 6F

01/05 09:20, , 7F
s大,你這樣1~3維都一樣喔
01/05 09:20, 7F

01/05 10:07, , 8F
搞錯了,其實語法就錯了...XD
01/05 10:07, 8F

01/05 10:08, , 9F
light=bsxfun(@(x,y)x.*(y>0),HSV,HSV(:,:,1));
01/05 10:08, 9F

01/05 10:09, , 10F
不確定會不會比樓上的寫法快就是了
01/05 10:09, 10F

01/05 10:10, , 11F
我的意思是,如果已經到了要從這種地方擠效能的程度
01/05 10:10, 11F

01/05 10:10, , 12F
那matlab可能不太適合
01/05 10:10, 12F

01/05 10:29, , 13F
s大寫出我想寫的東西了XDD,不過那樣出來不是3維
01/05 10:29, 13F

01/05 10:29, , 14F
矩陣,要在用cat,速度會更慢而已
01/05 10:29, 14F

01/05 10:30, , 15F
沒事,我誤會了QQ,S大是對的
01/05 10:30, 15F

01/05 10:30, , 16F
bsxfun用的很漂亮
01/05 10:30, 16F
QQ感謝各位的幫忙 因為由於另外一門課接觸Matlab 剛好生醫要寫專題 就順便拿來用了 該去學學bsxfun惹 ※ 編輯: andgitisaac (140.112.25.99), 01/11/2016 16:36:35
文章代碼(AID): #1MYY0lTS (MATLAB)