Я ищу надежный способ извлечь передний план из изображения, где фон имеет некоторый шум.
Итак, изображение, на котором я хочу его использовать, это:
Моя попытка состояла в том, чтобы использовать Otsu thresholding
. Я сделал это в Python следующим образом:
from skimage.filter import threshold_otsu
import os.path as path
import matplotlib.pyplot as plt
img = io.imread(path.expanduser('~/Desktop/62.jpg'))
r_t = threshold_otsu(img[:, :, 0])
g_t = threshold_otsu(img[:, :, 1])
b_t = threshold_otsu(img[:, :, 2])
m = np.zeros((img.shape[0], img.shape[1]), dtype=np.uint8)
mask = (img[:, :, 0] < r_t) & (img[:, :, 1] < g_t) & (img[:, :, 2] < b_t)
m[~mask] = 255
plt.imshow(m)
plt.show()
Это дает пороговое значение R, G, B как (62 67 64), что немного выше. Результат:
Это изображение также является одним из изображений, где Otsu thresholding
работал лучше всего. Если я использую ручное пороговое значение, например значение 30, оно работает достаточно хорошо. Результат:
Мне было интересно, есть ли какие-то другие подходы, которые я должен попробовать. Сегментация на самом деле не является моей областью знаний, и то, что я могу сделать из коробки, кажется ограниченным.