def hist(img):
hist = cv2.calcHist(img, [0], None, [256], [0, 256])
plt.plot(hist)
plt.show()
або
plt.hist(img.ravel() ,256,[0,256])
plt.show()
Гістограми кожного з BGR-каналів
image = cv2.imread('image.jpg')
for i, col in enumerate(['b', 'g', 'r']):
hist = cv2.calcHist([image], [i], None, [256], [0, 256])
plt.plot(hist, color = col)
plt.xlim([0, 256])
plt.show()
Вирівнювання гісторами
Для напівтонового зображення
img_eq = cv2.equalizeHist(img)
Адаптивне вирівнювання
from skimage.morphology import disk
img=skimage.io.imread('file.*')
selem = disk(50)
img_eq =rank.equalize(img, selem=selem)
Локально-адаптивне вирівнювання гістограми (CLAHE)
image = cv2.imread('image.jpg',0)
# створення CLAHE-об'єкту
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
img_clahe = clahe.apply(img)
OpenCV завантажує кольорові зображення в колірний простір BGR. Спроба вирівняти окремо вирівняти гістограми трьох каналів, кожен з яких містить данні про колір, приводить до втрати інформації і спотворення кольорів. Для вирішення проблеми зображення переводять з колірного простору BGR у колірний простір YUV у якому за інтенсивність відповідає лише один канал Y з номером $0.$ Після вирівнювання гістограми Y-каналу, при якому вже не змінюється інформація про кольори, зображення переводиться назад у BGR формат. Приклад вирівнювання гістограми кольорового зображення:
img = cv2.imread('foto.jpg')
# перетворення зображення з BGR в YUV формат
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# вирівнювання гістограми Y-каналу
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
# перетворення зображення з YUV в RGB формат
img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)
# горизонтальне поєднання двох зображень
res = np.hstack((img,img_output))
cv2.imshow("test", img_output)
cv2.waitKey(0)
cv2.destroyAllWindows()
Локально-адаптивне вирівнювання гістограми кольорового зображення
def color_adaptive_histogram(frame, clip_limit=4.0):
clahe = cv2.createCLAHE(clipLimit = clip_limit)
Y, U, V = cv2.split(cv2.cvtColor(frame, cv2.COLOR_BGR2YUV))
cl_Y = clahe.apply(Y)
return cv2.cvtColor(cv2.merge([cl_Y, U, V]), cv2.COLOR_YUV2BGR)
Приклад глобального (посередині) та локального (праворуч) вирівнювання гістограми низькоконтрастного кольорового зображення (ліворуч)
Немає коментарів:
Дописати коментар