2016-10-02 100 views
0

我試圖獲得一個圖像中的每個像素的一行的五列矩陣。前兩列是像素的位置(x,y),其餘列是像素的RGB值。MATLAB獲取xyrgb像素值

我可以使用一個循環來創建這個矩陣,但我想爲了提高效率而對這個操作進行向量化。我可以分別獲得img(:,:1),img(:,:2)和img(:,:3)的RGB值,但我不知道如何獲取x和y值在矢量化的同時關聯像素。

回答

1

您可以使用meshgrid讓所有xy座標,然後添加這些到你的數據造成了N x 5矩陣。

[x, y] = meshgrid(1:size(img, 2), 1:size(img, 1)); 
out = cat(2, x(:), y(:), reshape(img, [], 3)); 
0

Find是查詢座標的一種方法。

您可以分離RGB通道,找到了座標,然後將結果連接:

imgR = img(:, :, 1); 
imgG = img(:, :, 2); 
imgB = img(:, :, 3); 
[rows, cols] = find(imgR + 1); % +1 to avoid zeros! 
M = [rows, cols, imgR(:), imgG(:), imgB(:)]; 
+1

這隻適用於'imgR'中沒有零的情況' – Suever

+2

而'find'不過是快的,尤其是對於所有*索引的製表。 –

+0

另外find的輸出分別是行和列,所以它真的是'[y,x] = find(imgR)'如果有的話 – Suever