субота, 24 квітня 2021 р.

Гістограма та вирівнювання гістограми

Mathedemo Гістограма напівтонового зображення
 
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)
 
Приклад глобального (посередині) та локального (праворуч) вирівнювання гістограми низькоконтрастного кольорового зображення (ліворуч)

Немає коментарів:

Дописати коментар