Python实现图像增强算法怎样做
Admin 2022-08-13 群英技术资讯 699 次浏览
图像增强算法,图像锐化算法
1)基于直方图均衡化
2)基于拉普拉斯算子
3)基于对数变换
4)基于伽马变换
5) CLAHE
6)retinex-SSR
7)retinex-MSR
其中,基于拉普拉斯算子的图像增强为利用空域卷积运算实现滤波
基于同一图像对比增强效果
直方图均衡化:对比度较低的图像适合使用直方图均衡化方法来增强图像细节
拉普拉斯算子可以增强局部的图像对比度
log对数变换对于整体对比度偏低并且灰度值偏低的图像增强效果较好
伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于相机过曝)情况下的图像增强效果明显
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 # 对数变换 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()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在本篇文章中小编给大家分享了关于PHP的curl函数的用法总结以及相关知识点内容,需要的读者们学习下。
php高并发处理:1、应用程序与静态资源的分离。2、使用由应用程序生成的页面缓存。3、群集、多个服务器功能相同,主要起分流作用。4、反向代理。5、CDN。
本文通过设置Access-Control-Allow-Origin来实现跨域。例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。如果直接使用ajax访问,会有以下错误:1XMLHttpRequestcannotloadhttp://server.runoob.com/server.php.No'Access-Control
在本篇文章里小编给大家整理的是一篇关于php复制文件后改名的方法及相关内容,有兴趣的朋友们可以学习下。
在thinkphp中,route路由的作用就是简化URL访问地址,并且根据定义的路由类型做出正确的解析,路由的目的就是为了简化路径,在简化路径的同时进行一些规则的定义。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008