基于python的数字图像处理--学习笔记(三)

  • 前言
  • 一、灰度拉伸
  • 二、幂律(伽马)变换
  • 三、对数变换

前言

进入冈萨雷斯的第三章内容,并用python实现功能。我更改了代码源,之前找到太烂了,代码全是错、、现在使用的代码很清晰,功能也很全。


一、灰度拉伸

灰度拉伸, 也称对比度拉伸, 是一种简单的线性点运算 ,扩展图像的直方图使其充满整个灰度等级范围内.

代码如下(示例):

"""
Created by HenryMa on 2020/8/24
"""__author__ = 'HenryMa'import math
# from builtins import range, print
import numpy as np
import cv2def contrastStretchTransform(image):"""灰度拉伸定义: 灰度拉伸, 也称对比度拉伸, 是一种简单的线性点运算.作用: 扩展图像的直方图, 使其充满整个灰度等级范围内.公式: A = min[f(x, y)], 最小灰度级;B = max[f(x, y)], 最大灰度级;f(x, y)为输入图像, g(x, y)为输出图像.缺点: 如果灰度图像中最小值A=0, 最大值B=255, 则图像没有什么改变."""# 彩色图像h, w, d = image.shapenew_img = np.zeros((h, w, d), dtype=np.float32)A = image.min()B = image.max()print(A, B)for i in range(h):for j in range(w):for k in range(d):new_img[i, j, k] = 255.0 / (B - A) * (image[i, j, k] - A) + 0.5# new_img = cv2.normalize(new_img, None, 0, 255, cv2.NORM_MINMAX)# new_img = cv2.convertScaleAbs(new_img)new_img=new_img.astype(np.uint8)A1 = new_img.min()B1 = new_img.max()print(A1,B1)return new_imgif __name__ == '__main__':img = cv2.imread('../pic/beizi.png', 1)contrast_img = contrastStretchTransform(img)cv2.imshow('src img', img)cv2.imshow('contrast img', contrast_img)cv2.waitKey(0)


二、幂律(伽马)变换

伽马变换可以很好地拉伸图像的对比度, 扩展灰度级。伽马大于1,图片会变暗;伽马值小于1,图片整体变亮

代码如下(示例):

"""
Created by HenryMa on 2020/8/24
"""__author__ = 'HenryMa'import math
from builtins import range, print
import numpy as np
import cv2def gammaTransform(c, gamma, image):# 彩色图像"""h, w, d = image.shape[0], image.shape[1], image.shape[2]new_img = np.zeros((h, w, d), dtype=np.float32)for i in range(h):for j in range(w):for k in range(d):new_img[i, j, k] = c*math.pow(image[i, j, k], gamma)cv2.normalize(new_img, new_img, 0, 255, cv2.NORM_MINMAX)print(new_img)new_img = cv2.convertScaleAbs(new_img)print(new_img)"""# 灰度图h, w = image.shape[0], image.shape[1]new_img = np.zeros((h, w), dtype=np.float32)for i in range(h):for j in range(w):new_img[i, j] = c * math.pow(image[i, j], gamma)cv2.normalize(new_img, new_img, 0, 255, cv2.NORM_MINMAX)new_img = cv2.convertScaleAbs(new_img)return new_imgif __name__ == '__main__':img = cv2.imread('../pic/Fig0309(a)(washed_out_aerial_image).tif', 0)# gamma_img1 = gammaTransform(1, 0.6, img)# gamma_img2 = gammaTransform(1, 0.4, img)# gamma_img3 = gammaTransform(1, 0.3, img)gamma_img4 = gammaTransform(1, 3.0, img)gamma_img5 = gammaTransform(1, 4.0, img)gamma_img6 = gammaTransform(1, 5.0, img)cv2.imshow('origin', img)# cv2.imshow('gamma_img1', gamma_img1)# cv2.imshow('gamma_img2', gamma_img2)# cv2.imshow('gamma_img3', gamma_img3)cv2.imshow('gamma_img4', gamma_img4)cv2.imshow('gamma_img5', gamma_img5)cv2.imshow('gamma_img6', gamma_img6)cv2.waitKey(0)

三、对数变换

由于对数曲线在像素值较低的区域斜率大, 在像素值较高的区域斜率较小, 所以图像经过对数变换后, 较暗区域的对比度将有所提升. 可用于增强图像的暗部细节.

代码如下(示例):

"""
Created by HenryMa on 2020/8/24
"""__author__ = 'HenryMa'import cv2
import math
import numpy as np
from builtins import range, printdef logTransform(c, image):# 3通道RGB"""h, w, d = image.shape[0], image.shape[1], image.shape[2]new_img = np.zeros((h, w, d))min = 255max = 0for i in range(h):for j in range(w):for k in range(d):new_img[i, j, k] = c * (math.log(1.0 + image[i, j, k]))# print(new_img)new_img = cv2.normalize(new_img, new_img, 0, 255, cv2.NORM_MINMAX)/255.print(new_img.max(), new_img.min())print(new_img)return new_img"""# 灰度图h, w = img.shape[0], img.shape[1]new_img = np.zeros((h, w))for i in range(h):for j in range(w):new_img[i, j] = c * (math.log(1.0 + img[i, j]))new_img = cv2.normalize(new_img, new_img, 0, 255, cv2.NORM_MINMAX)/255.return new_imgif __name__ == '__main__':img = cv2.imread('../pic/Fig0305(a)(DFT_no_log).tif', 0)log_img = logTransform(1, img)cv2.imshow('src_img', img)cv2.imshow('log_img', log_img)cv2.waitKey(0)

基于python的数字图像处理--学习笔记(三)相关推荐

  1. python自动化办公要学多久-基于python实现自动化办公学习笔记三

    Excel (1)写xls文件 # 有序字典 from collections import OrderedDict # 存储数据 from pyexcel_xls import save_data ...

  2. 数字图像处理学习笔记 六 彩色图像处理

    目录 (一)彩色模型介绍 1.1 RGB模型 1.2 CMY.CMYK模型 1.3 HSI彩色模型 1.4 HSV模型 1.5 YCbCr 彩色空间 (二)伪彩色图像处理 (三)全彩色图像处理及彩色变 ...

  3. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  4. 数字图像处理学习笔记(三)——空间分辨率和灰度分辨率、等偏爱曲线

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  5. 数字图像处理学习笔记(一):特征检测和匹配概述

    数字图像处理学习笔记(一):特征检测和匹配概述 参考博客: 特征点的匹配 SIFT特征详解 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 1.特征点概述 如何高效且准确的匹配出两个不同 ...

  6. 数字图像处理学习笔记(十)——空间滤波

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  7. 数字图像处理学习笔记(十五)——图像复原与重建

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  8. 数字图像处理学习笔记(六)——数字图像处理中用到的数学操作

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  9. 数字图像处理学习笔记(八)——图像增强处理方法之点处理

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

最新文章

  1. Angular响应式表单及表单验证
  2. cisco 访问控制列表ACL笔记
  3. 视觉与图像系列 几何光学I 近轴光学1 Fermat原理
  4. 《剑指offer》— JavaScript(24)二叉树中和为某一值的路径
  5. arraycopy方法的作用_System. arraycopy()入门指南
  6. 第三次学JAVA再学不好就吃翔(part19)--二维数组
  7. linux服务器监控zabbix,Linux监控之--使用ZABBIX监控web服务器
  8. 华为上机考试注意事项及编程技巧
  9. 中国人寿构建国内首个Silverlight企业级应用
  10. In this year of Hors, he is an adopted son
  11. 利用matlab的帮助功能分别查询inv,MATLAB实验报告第一章..doc
  12. js中的 substring和substr方法
  13. springmvc连接mysql_挺详细的spring+springmvc+mybatis配置整合|含源代码
  14. 大数据时代下数据挖掘技术的应用
  15. 如何设置计算机用户名和密码忘了怎么办,电脑密码忘记了怎么办
  16. android手机fingerprint,Fingerprint HIDL
  17. 《被讨厌的勇气》摘抄
  18. 考研英语 - word-list-31
  19. pycharm python 依赖管理_怎么解决pycharm license Acti的方法_python
  20. python爬虫实现音乐下载

热门文章

  1. 网络安全从业人员应具备的职业素养
  2. Python + Django4 搭建个人博客(十):实现文章详情页面
  3. 网络规划设计师上午真题及解析(2019)
  4. altium 交叉线_怎样设置原理图中电气连接线交叉点的属性?
  5. 9、法律法规与标准化知识
  6. 自定义控件其实很简单 四
  7. 几年工作之后“十句职场密语”
  8. 银河麒麟服务器操作系统V10SP2搭建FTP服务端
  9. js在浏览器中对cookie进行增删改查
  10. STM32的硬件I2C与AT24C16