作者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/cn.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