欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)圖像增強(qiáng)算法

 更新時(shí)間:2022年08月05日 15:26:57   作者:咸魚也有翻身日  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖像增強(qiáng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)圖像增強(qiáng)算法的具體代碼,供大家參考,具體內(nèi)容如下

圖像增強(qiáng)算法,圖像銳化算法

1)基于直方圖均衡化

2)基于拉普拉斯算子

3)基于對(duì)數(shù)變換

4)基于伽馬變換

5)  CLAHE

6)  retinex-SSR

7)  retinex-MSR

其中,基于拉普拉斯算子的圖像增強(qiáng)為利用空域卷積運(yùn)算實(shí)現(xiàn)濾波
基于同一圖像對(duì)比增強(qiáng)效果
直方圖均衡化:對(duì)比度較低的圖像適合使用直方圖均衡化方法來增強(qiáng)圖像細(xì)節(jié)
拉普拉斯算子可以增強(qiáng)局部的圖像對(duì)比度
log對(duì)數(shù)變換對(duì)于整體對(duì)比度偏低并且灰度值偏低的圖像增強(qiáng)效果較好
伽馬變換對(duì)于圖像對(duì)比度偏低,并且整體亮度值偏高(對(duì)于相機(jī)過曝)情況下的圖像增強(qiáng)效果明顯

import cv2
import numpy as np
import matplotlib.pyplot as plt


# 直方圖均衡增強(qiáng)
def hist(image):
? ? r, g, b = cv2.split(image)
? ? r1 = cv2.equalizeHist(r)
? ? g1 = cv2.equalizeHist(g)
? ? b1 = cv2.equalizeHist(b)
? ? image_equal_clo = cv2.merge([r1, g1, b1])
? ? return image_equal_clo


# 拉普拉斯算子
def laplacian(image):
? ? kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
? ? image_lap = cv2.filter2D(image, cv2.CV_8UC3, kernel)
? ?# cv2.imwrite('th1.jpg', image_lap)
? ? return image_lap


# 對(duì)數(shù)變換
def log(image):
? ? image_log = np.uint8(np.log(np.array(image) + 1))
? ? cv2.normalize(image_log, image_log, 0, 255, cv2.NORM_MINMAX)
? ? # 轉(zhuǎn)換成8bit圖像顯示
? ? cv2.convertScaleAbs(image_log, image_log)
? ? return image_log


# 伽馬變換
def gamma(image):
? ? fgamma = 2
? ? image_gamma = np.uint8(np.power((np.array(image) / 255.0), fgamma) * 255.0)
? ? cv2.normalize(image_gamma, image_gamma, 0, 255, cv2.NORM_MINMAX)
? ? cv2.convertScaleAbs(image_gamma, image_gamma)
? ? return image_gamma


# 限制對(duì)比度自適應(yīng)直方圖均衡化CLAHE
def clahe(image):
? ? b, g, r = cv2.split(image)
? ? clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
? ? b = clahe.apply(b)
? ? g = clahe.apply(g)
? ? r = clahe.apply(r)
? ? image_clahe = cv2.merge([b, g, r])
? ? return image_clahe


def replaceZeroes(data):
? ? min_nonzero = min(data[np.nonzero(data)])
? ? data[data == 0] = min_nonzero
? ? return data


# retinex SSR
def SSR(src_img, size):
? ? L_blur = cv2.GaussianBlur(src_img, (size, size), 0)
? ? img = replaceZeroes(src_img)
? ? L_blur = replaceZeroes(L_blur)

? ? dst_Img = cv2.log(img/255.0)
? ? dst_Lblur = cv2.log(L_blur/255.0)
? ? dst_IxL = cv2.multiply(dst_Img, dst_Lblur)
? ? log_R = cv2.subtract(dst_Img, dst_IxL)

? ? dst_R = cv2.normalize(log_R,None, 0, 255, cv2.NORM_MINMAX)
? ? log_uint8 = cv2.convertScaleAbs(dst_R)
? ? return log_uint8


def SSR_image(image):
? ? size = 3
? ? b_gray, g_gray, r_gray = cv2.split(image)
? ? b_gray = SSR(b_gray, size)
? ? g_gray = SSR(g_gray, size)
? ? r_gray = SSR(r_gray, size)
? ? result = cv2.merge([b_gray, g_gray, r_gray])
? ? return result


# retinex MMR
def MSR(img, scales):
? ? weight = 1 / 3.0
? ? scales_size = len(scales)
? ? h, w = img.shape[:2]
? ? log_R = np.zeros((h, w), dtype=np.float32)

? ? for i in range(scales_size):
? ? ? ? img = replaceZeroes(img)
? ? ? ? L_blur = cv2.GaussianBlur(img, (scales[i], scales[i]), 0)
? ? ? ? L_blur = replaceZeroes(L_blur)
? ? ? ? dst_Img = cv2.log(img/255.0)
? ? ? ? dst_Lblur = cv2.log(L_blur/255.0)
? ? ? ? dst_Ixl = cv2.multiply(dst_Img, dst_Lblur)
? ? ? ? log_R += weight * cv2.subtract(dst_Img, dst_Ixl)

? ? dst_R = cv2.normalize(log_R,None, 0, 255, cv2.NORM_MINMAX)
? ? log_uint8 = cv2.convertScaleAbs(dst_R)
? ? return log_uint8


def MSR_image(image):
? ? scales = [15, 101, 301] ?# [3,5,9]
? ? b_gray, g_gray, r_gray = cv2.split(image)
? ? b_gray = MSR(b_gray, scales)
? ? g_gray = MSR(g_gray, scales)
? ? r_gray = MSR(r_gray, scales)
? ? result = cv2.merge([b_gray, g_gray, r_gray])
? ? return result


if __name__ == "__main__":
? ? image = cv2.imread('img/FJ(93).png')
? ? image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

? ? plt.subplot(4, 2, 1)
? ? plt.imshow(image)
? ? plt.axis('off')
? ? plt.title('Offical')

? ? # 直方圖均衡增強(qiáng)
? ? image_equal_clo = hist(image)

? ? plt.subplot(4, 2, 2)
? ? plt.imshow(image_equal_clo)
? ? plt.axis('off')
? ? plt.title('equal_enhance')

? ? # 拉普拉斯算法增強(qiáng)
? ? image_lap = laplacian(image)
? ? plt.subplot(4, 2, 3)
? ? plt.imshow(image_lap)
? ? plt.axis('off')
? ? plt.title('laplacian_enhance')

? ? # LoG對(duì)象算法增強(qiáng)
? ? image_log = log(image)

? ? plt.subplot(4, 2, 4)
? ? plt.imshow(image_log)
? ? plt.axis('off')
? ? plt.title('log_enhance')

? ? # # 伽馬變換
? ? image_gamma = gamma(image)

? ? plt.subplot(4, 2, 5)
? ? plt.imshow(image_gamma)
? ? plt.axis('off')
? ? plt.title('gamma_enhance')

? ? # CLAHE
? ? image_clahe = clahe(image)

? ? plt.subplot(4, 2, 6)
? ? plt.imshow(image_clahe)
? ? plt.axis('off')
? ? plt.title('CLAHE')

? ? # retinex_ssr
? ? image_ssr = SSR_image(image)

? ? plt.subplot(4, 2, 7)
? ? plt.imshow(image_ssr)
? ? plt.axis('off')
? ? plt.title('SSR')

? ? # retinex_msr
? ? image_msr = MSR_image(image)

? ? plt.subplot(4, 2, 8)
? ? plt.imshow(image_msr)
? ? plt.axis('off')
? ? plt.title('MSR')

? ? plt.show()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論