我試圖獲得一個圖像中的每個像素的一行的五列矩陣。前兩列是像素的位置(x,y),其餘列是像素的RGB值。MATLAB獲取xyrgb像素值
我可以使用一個循環來創建這個矩陣,但我想爲了提高效率而對這個操作進行向量化。我可以分別獲得img(:,:1),img(:,:2)和img(:,:3)的RGB值,但我不知道如何獲取x和y值在矢量化的同時關聯像素。
我試圖獲得一個圖像中的每個像素的一行的五列矩陣。前兩列是像素的位置(x,y),其餘列是像素的RGB值。MATLAB獲取xyrgb像素值
我可以使用一個循環來創建這個矩陣,但我想爲了提高效率而對這個操作進行向量化。我可以分別獲得img(:,:1),img(:,:2)和img(:,:3)的RGB值,但我不知道如何獲取x和y值在矢量化的同時關聯像素。
您可以使用meshgrid
讓所有x
和y
座標,然後添加這些到你的數據造成了N x 5
矩陣。
[x, y] = meshgrid(1:size(img, 2), 1:size(img, 1));
out = cat(2, x(:), y(:), reshape(img, [], 3));
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(:)];
這隻適用於'imgR'中沒有零的情況' – Suever
而'find'不過是快的,尤其是對於所有*索引的製表。 –
另外find的輸出分別是行和列,所以它真的是'[y,x] = find(imgR)'如果有的話 – Suever