あなたの間違いは、それぞれのカラーチャンネルに対してfind
の操作を別々に使用しています。
[row, col] = find(((bart(:, :, 1) == 0) & (bart(:, :, 2) == 80) & (bart(:, :, 3) == 41)), 1)
上記の例では、行は、第1の座標最小:
溶液が最初の条件を適用する簡単です。
あなたが列拳を最小限に抑える必要がある場合は、あなたがfind
を適用する前に移調することができます
[col, row] = find([((bart(:, :, 1) == 0) & (bart(:, :, 2) == 80) & (bart(:, :, 3) == 41))]', 1)
例により説明:
%Read input image
RGB = imread('https://i.stack.imgur.com/2sRiY.jpg');
%Unpack RGB planes (just for example purpose - you don't need to do it).
R = RGB(:, :, 1);
G = RGB(:, :, 2);
B = RGB(:, :, 3);
%(R == 0) is a logical matrix with 1 where condition is true, and 0 where false.
%Same think for (G == 80) and for (B == 41)
figure;imshow(R == 0); %Same as imshow(RGB(:,:,1) == 0)
figure;imshow(G == 80);
figure;imshow(B == 41);
画像:
R == 0を

G == 80

Bの== 41

%Now use AND operation between the three logical matrices:
A = ((RGB(:, :, 1) == 0) & (RGB(:, :, 2) == 80) & (RGB(:, :, 3) == 41));
%A is a logical matrix with 1 where condition is true, and 0 where false.
figure;imshow(A);
画像A:

%The following operation minimize column first:
%Find first index where A equals true (where value equals 1).
[col, row] = find(A, 1);
%In case you need to minimize the row first, you can transpose A:
[row, col] = find(A', 1);
%All operations in single statement:
[row, col] = find(((RGB(:, :, 1) == 0) & (RGB(:, :, 2) == 80) & (RGB(:, :, 3) == 41)), 1);
私はあなたが何をすべきかを指定することがあると思いますあなたはwhithを意味する "最小p ixel "。あなたの最小2D座標は何ですか? – marcoresk
hte fminimum(x、y)coordenates。左上の最初の緑色ピクセル – albert
@marcoreskは言ったように、_x_と_y_を同時に最小化することはできません。 'x'と' y'の和を最小にしたいですか? 'x'と' y'のうち最大のものは? ...? –