您的錯誤是對每個顏色通道單獨使用find
操作。
的解決方案是簡單的第一施加條件:
[row, col] = find(((bart(:, :, 1) == 0) & (bart(:, :, 2) == 80) & (bart(:, :, 3) == 41)), 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);
圖片:
ř== 0
摹== 80
乙== 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);
我認爲你必須指定做什麼你的意思是「最小p」 ixel」。什麼是您的最小二維座標? – marcoresk
hte fminimum(x,y)coordenates。這將是左上角的第一個綠色像素 – albert
正如@marcoresk所說,你不能同時使_x_和_y_最小化。你想最小化'x'和'y'的總和嗎? 'x'和'y'中最大的? ...? –