gamma校正
gamma校正可使得图像看起来更符合人眼的特性。gamma校正公式常写为Out= Ingamma或者Out= In1/gamma形式,式中,In表示Input image, Out 表示Output image。本文采用第一种形式。gamma校正前后图像的亮度对比如下图所示。本文分别用opencv-python和MATLAB实现了gamma校正。
1. opencv-python实现gamma校正
1 import cv2 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 gamma1 = 0.4 6 gamma2 = 2.5 7 8 imgIn = cv2.imread('messi.jpg', 0) 9 imgIn = imgIn.astype(float) / 255 10 11 out1 = imgIn ** gamma1 12 out2 = imgIn ** gamma2 13 14 out1 *= 255 15 out1[out1 < 0] = 0 16 out1[out1 > 255] = 255 17 out1 = out1.astype(np.uint8) 18 19 out2 *= 255 20 out2[out2 < 0] = 0 21 out2[out2 > 255] = 255 22 out2 = out2.astype(np.uint8) 23 24 # show images 25 plt.subplot(131) 26 plt.title('gamma=0.4') 27 plt.xticks([]) # 去除刻度 28 plt.yticks([]) 29 plt.imshow(out1, cmap='gray') 30 31 plt.subplot(132) 32 plt.title('original image') 33 plt.xticks([]) 34 plt.yticks([]) 35 plt.imshow(imgIn, cmap='gray') 36 37 plt.subplot(133) 38 plt.title('gamma=2.5') 39 plt.xticks([]) 40 plt.yticks([]) 41 plt.imshow(out2, cmap='gray') 42 plt.show()
效果如下:
2. MATLAB实现gamma校正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | clear ; img_ori = imread ( 'Fig0308(a)(fractured_spine).tif' ); img_mat = mat2gray(img_ori, [0 255]); c = 1; gamma03 = 0.3; gamma06 = 0.6; gamma25 = 2.5; img_gam03 = c*(img_mat.^gamma03); img_gam06 = c*(img_mat.^gamma06); img_gam25 = c*(img_mat.^gamma25); % show images figure ; subplot (1,4,1); imshow(img_mat, [0, 1]); title ( 'original image' ); subplot (1,4,2); imshow(img_gam03, [0, 1]); title ( 'gamma=0.3' ); subplot (1,4,3); imshow(img_gam06, [0, 1]); title ( 'gamma=0.6' ); subplot (1,4,4); imshow(img_gam25, [0, 1]); title ( 'gamma=2.5' ); |
效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通