作者doom8199 (~口卡口卡 修~)
看板MATLAB
标题[问题] 矩阵元素换值问题
时间Wed Dec 7 11:05:38 2011
假设有一张图档
用 imread 读取後叫做 src_img ( size 为 [height,width,3] )
然後我手边有一个 256x3 的矩阵 color
想把 图档中 j-channel 的颜色强度 (i-1) 替换成 color(i,j)
matlab 我是这样打:
dst_img = src_img;
for i = 1:256
for j = 1:3
[ row, col, ~] = find( src_img(:.:.j) == (i-1));
for k = 1:size(row)
dst_img( row(k), col(k), j) = color(i,j);
end
end
end
------------
[问题一]
若把上面改写成:
dst_img = src_img;
for i = 1:256
for j = 1:3
dst_img( src_img(:.:.j) == (i-1), j) = color(i,j);
end
end
想请问一下为何这样写会出错 ?
因为 matlab 跑出来的 dst_img, 其 size 会变得很大 QQ
若把 rgb 图档分别用2维矩阵储存
在用上面类似的写法就会是对的
[问题二]
想请问一下有没有比较好的精简写法 ?
先感谢各位大大们的解惑︿︿
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.211.139
1F:推 sunev:logical indexing 和 number indexing好像不能混用 12/07 12:00
2F:推 Raymond0710:用index image改colormap就好了 一个lookup table观念 12/07 13:15
3F:推 Raymond0710:[ row, col, ~] = find( src_img(:.:.j) == (i-1)); 12/07 13:21
4F:→ Raymond0710:dst_img( row, col, j) = color(i,j); % 这样应该可以 12/07 13:22
5F:→ doom8199:可是这样子打更动到的会是一个矩形状区域,而非是数个点 12/07 13:26
6F:推 Raymond0710:喔喔 这只有在向量可以用 看你要不要把矩阵拉成向量 12/07 13:48
7F:→ Raymond0710:用我的方法再reshape回来 12/07 13:48
8F:→ Raymond0710:X = rand(10,1); X(X<0.5) = 0; % 像这样<0.5都=0 12/07 13:50
9F:→ Raymond0710:其实就是你的方法XD 12/07 13:50