[問題] 矩陣元素換值問題

看板MATLAB作者 (~口卡口卡 修~)時間12年前 (2011/12/07 11:05), 編輯推噓4(405)
留言9則, 3人參與, 最新討論串1/1
假設有一張圖檔 用 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

12/07 12:00, , 1F
logical indexing 和 number indexing好像不能混用
12/07 12:00, 1F

12/07 13:15, , 2F
用index image改colormap就好了 一個lookup table觀念
12/07 13:15, 2F

12/07 13:21, , 3F
[ row, col, ~] = find( src_img(:.:.j) == (i-1));
12/07 13:21, 3F

12/07 13:22, , 4F
dst_img( row, col, j) = color(i,j); % 這樣應該可以
12/07 13:22, 4F

12/07 13:26, , 5F
可是這樣子打更動到的會是一個矩形狀區域,而非是數個點
12/07 13:26, 5F

12/07 13:48, , 6F
喔喔 這只有在向量可以用 看你要不要把矩陣拉成向量
12/07 13:48, 6F

12/07 13:48, , 7F
用我的方法再reshape回來
12/07 13:48, 7F

12/07 13:50, , 8F
X = rand(10,1); X(X<0.5) = 0; % 像這樣<0.5都=0
12/07 13:50, 8F

12/07 13:50, , 9F
其實就是你的方法XD
12/07 13:50, 9F
文章代碼(AID): #1EtjW6P9 (MATLAB)