看板 MATLAB 關於我們 聯絡資訊
假設有一張圖檔 用 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
sunev:logical indexing 和 number indexing好像不能混用 12/07 12:00
Raymond0710:用index image改colormap就好了 一個lookup table觀念 12/07 13:15
Raymond0710:[ row, col, ~] = find( src_img(:.:.j) == (i-1)); 12/07 13:21
Raymond0710:dst_img( row, col, j) = color(i,j); % 這樣應該可以 12/07 13:22
doom8199:可是這樣子打更動到的會是一個矩形狀區域,而非是數個點 12/07 13:26
Raymond0710:喔喔 這只有在向量可以用 看你要不要把矩陣拉成向量 12/07 13:48
Raymond0710:用我的方法再reshape回來 12/07 13:48
Raymond0710:X = rand(10,1); X(X<0.5) = 0; % 像這樣<0.5都=0 12/07 13:50
Raymond0710:其實就是你的方法XD 12/07 13:50