Ihr Fehler verwendet find
Operation für jeden Farbkanal separat.
Die Lösung ist einfach, den Zustand der Anwendung zuerst:
[row, col] = find(((bart(:, :, 1) == 0) & (bart(:, :, 2) == 80) & (bart(:, :, 3) == 41)), 1)
obiges Beispiel minimieren Reihe ersten Koordinate.
[col, row] = find([((bart(:, :, 1) == 0) & (bart(:, :, 2) == 80) & (bart(:, :, 3) == 41))]', 1)
Erklären Sie mit gutem Beispiel:
Im Fall, dass Sie die Spalte Faust zu minimieren, können Sie vor find
Anwendung transponieren
%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);
Bilder:
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);
Bild 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);
Ich denke, müssen Sie angeben, was zu tun du meinst mit "minimum p ixel ". Was sind minimale 2D Koordinaten für dich? – marcoresk
hte fminimum (x, y) koordiniert. Es wäre das erste grüne Pixel oben links. – albert
Wie @marcoresk sagte, können Sie _x_ und _y_ nicht gleichzeitig minimieren. Möchten Sie die Summe von 'x' und' y' minimieren? Der größte von 'x' und' y'? ...? –