Удалить фон (с краев) из изображения и построить гистограмму - PullRequest
0 голосов
/ 27 мая 2019

Используя python, я хочу удалить фон изображения и построить гистограмму (столбец) оставшейся части изображения.В частности, я хочу удалить черный фон, в который было встроено изображение.Этот черный фон находится вверху справа, вверху слева, внизу справа и внизу слева от изображения.Вот мое изображение:

enter image description here

Полезная часть изображения - круглая фигура в центре, и я хочу нарисовать гистограмму для этого полезногочасть изображения.Как я могу удалить фон и построить гистограмму?

Ниже приведен мой код того, что я сделал до сих пор.

from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.pyplot import bar
import numpy as np

im_gray = Image.open('image.png').convert('L')
im_arr = np.array( im_gray )
im_flat = im_arr.ravel()

mark_bkg = np.where( im_flat != im_arr[0,0]  )[0]
im_no_bkg = im_flat[ mark_bkg ]

hist, bin_edges = np.histogram(im_no_bkg, bins=30, density=False)

plt.figure(1)
bar( x=bin_edges[:-1], height=hist, width=1.0, bottom=None, align='center', data=None )
plt.show()

1 Ответ

0 голосов
/ 27 мая 2019

Если вы сохраняете изображение как grayscale [0-255].

Чтобы скрыть фон black 255, примените mask() к изображению.

# Removing black background
img = np.array([...])
img = np.ma.masked_equal(img, 255)

# Plotting histogram
plt.hist(img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k')
plt.show()

1012 * Заговор *

...