[英]Accessing elements in matlab, get pixels of color image (array) from indices stored in another array
A
和B
是掩碼索引(分別是行和列), C
是圖像,我想要注意存儲在C
的顏色值,索引存儲在A
和B
。 如果A
和B
類似於[1, 2, 3]
和[20, 30, 40]
那么我想找到C(1, 20, :)
, C(2, 30, :)
和C(3, 40, :)
。
如果我做D = C(A, B, :)
,在這種情況下我得到一個大小為3x3x3的數組,但是我想要一個大小為3x1x3的數組。 我知道我正在搞亂索引,是否有一種簡單的方法可以在不編寫循環的情況下執行此操作?
簡單地說,是否有辦法在沒有循環的情況下執行以下操作:
for i = 1:10
D(i, :) = C(A(i), B(i), :)
end
您需要將子指數轉換為線性索引。 您可以使用sub2ind
:
r = C(sub2ind([size(C,1) size(C,2) 1],A,B,1*ones(1,length(A))));
g = C(sub2ind([size(C,1) size(C,2) 2],A,B,2*ones(1,length(A))));
b = C(sub2ind([size(C,1) size(C,2) 3],A,B,3*ones(1,length(A))));
你想要的nx 1 x 3結果就是cat(3, r.',g.',b.')
。
聽起來好像一切正常。 在您的示例中,您使用A和B索引了9個C元素。然后D是3x3x3數組,其維度對應於[row x col x color_mask(RGB)]。 為什么第二個維度會減少到1,除非B只包含一個值(表示你只想從一列中獲取元素)? 當然,A和B不得包含高於C中行數和列數的值。
A = [1 2 3];
B = [20];
D = C(A,B,:);
size(D)
>> 3 1 3
編輯:好的,我明白你的意思了。 您想使用A(Nx1)和B(Nx1)指定N個點數。 不是NxN點數,這是你目前得到的。
為什么不喜歡
C = C(A,B(i),:);
您可以使用for語句來獲取i的值或以其他方式設置它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.