作者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