То, что вы хотите сделать, называется сегментация и является большой темой в обработке изображений.Ваше изображение довольно хорошее, поэтому, если у вас есть набор инструментов для обработки изображений, это довольно просто.И даже если вы этого не сделаете, все равно это не так сложно.
Как упоминает Крис, вы должны преобразовать свое изображение в двойное, прежде чем что-либо делать с ним.Если у вас есть набор инструментов для обработки изображений, вы можете использовать функцию graythresh , чтобы найти лучший пороговый уровень.Обратите внимание, что вам не нужно использовать циклы для выполнения пороговых значений, в MATLAB вы можете портировать всю матрицу в одну строку.
b = im2double(b); %convert to double
thresh_level = graythresh(b); %find best threshold level
c = b > thresh_level; %do thresholding
imshow(c)
![segmented image](https://i.stack.imgur.com/K8RVv.jpg)
Это дает вамбинарное изображение, где ваш кулак имеет значение 1 и фоновую метку 0. Чтобы сохранить кулак таким, какой он был, мы умножаем бинарную версию на исходную версию.Теперь весь фон равен нулю, и кулак сохраняет свои исходные значения.
d = im2double(c).*b; %c is binary, so we need to convert it first
imshow(d,[])
![fist](https://i.stack.imgur.com/Jv7fn.jpg)
Если у вас нет набора инструментов для обработки изображений, вам нужно выбрать пороговый уровеньвручную.Это может быть немного сложно.Вы использовали 0,06, но Graythresh предполагает, что 0,2980 является лучшим.Я считаю, что хороший способ найти пороговое значение - взглянуть на гистограмму изображения.
hist(b(:),256);
![histogram](https://i.stack.imgur.com/5zi07.jpg)
Из гистограммы ясно видно, что у нас есть двакластеры точек и что любое значение от 2 до 3 будет хорошо разделять кластеры.Таким образом, мы должны использовать значение в этом интервале, чтобы сделать пороговое значение.