亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)圖像增強算法

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

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

圖像增強算法,圖像銳化算法

1)基于直方圖均衡化

2)基于拉普拉斯算子

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

4)基于伽馬變換

5)  CLAHE

6)  retinex-SSR

7)  retinex-MSR

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

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


# 直方圖均衡增強
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


# 對數(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)
? ? # 轉換成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


# 限制對比度自適應直方圖均衡化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')

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

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

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

? ? # LoG對象算法增強
? ? 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()

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論