イメージの各ピクセルに1つの行を持つ5列の行列を取得しようとしています。最初の2つの列はピクセルの位置(x、y)であり、残りの列はピクセルのRGB値です。MATLAB xyrgbピクセル値を取得
私はこの行列を作成するためにループを使うことができますが、効率化のためにこの操作をベクトル化したいと思います。 img(:、:、1)、img(:、:2)、img(:,:3)でRGB値を取得できますが、x値とy値を取得する方法はわかりませんベクトル化中に関連するピクセルの値を計算する。
イメージの各ピクセルに1つの行を持つ5列の行列を取得しようとしています。最初の2つの列はピクセルの位置(x、y)であり、残りの列はピクセルのRGB値です。MATLAB xyrgbピクセル値を取得
私はこの行列を作成するためにループを使うことができますが、効率化のためにこの操作をベクトル化したいと思います。 img(:、:、1)、img(:、:2)、img(:,:3)でRGB値を取得できますが、x値とy値を取得する方法はわかりませんベクトル化中に関連するピクセルの値を計算する。
あなたはすべてのx
とy
座標を取得するためにmeshgrid
を使用し、N x 5
マトリックスが得られ、あなたのデータにこれらを追加することができます。
[x, y] = meshgrid(1:size(img, 2), 1:size(img, 1));
out = cat(2, x(:), y(:), reshape(img, [], 3));
Find
は、座標を照会する方法の1つです。
あなたは、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