Търся стабилен начин за извличане на преден план от изображение, където фонът има някакъв шум в него.
И така, изображението, върху което искам да го използвам, е:
Моят опит беше да използвам 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, той работи доста добре. Резултатът е:
Чудех се дали има други подходи, които трябва да опитам. Сегментирането наистина не е моята експертна област и това, което мога да направя извън кутията, изглежда ограничено.