簡體   English   中英

訪問matlab中的元素,從存儲在另一個數組中的索引獲取彩色圖像(數組)的像素

[英]Accessing elements in matlab, get pixels of color image (array) from indices stored in another array

AB是掩碼索引(分別是行和列), C是圖像,我想要注意存儲在C的顏色值,索引存儲在AB 如果AB類似於[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM