空间域处理是直接对像素进行操作的方法,这是相对于频率域处理而言的。空间域处理主要分为两大类:灰度变换和空间滤波。灰度变换在图像单个像素上操作,主要以对比度和阈值处理为目的。空间滤波涉及改善性能的操作,通过像元领域来处理。

空间域处理均可由下式表达:

常用的基本函数有三类:线性函数,对数函数(对数和反对数)和幂律函数(n次幂和n次根)

1、对数变换

对数变换将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的;同时可以很好的压缩像素值变化较大的图像的动态范围,目的是突出我们需要的细节。反对数变换则与对数函数不同的是,强调的是图像的高灰度部分,对数变换公式如下

import cv2
import imutils
import numpy as np

image = cv2.imread('E:/peking_rw/ocr_project/base_prehandle/img/DFT_no_log.jpg')
log_img = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.float32)
for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        log_img[i, j, 0] = math.log(1 + image[i, j, 0])
        log_img[i, j, 1] = math.log(1 + image[i, j, 1])
        log_img[i, j, 2] = math.log(1 + image[i, j, 2])
cv2.normalize(log_img, log_img, 0, 255, cv2.NORM_MINMAX)
log_img = cv2.convertScaleAbs(log_img)
cv2.imshow('image', imutils.resize(image, 400))
cv2.imshow('log transform', imutils.resize(log_img, 400))
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

2、幂律变换

幂律变换主要用于图像的校正,对漂白的图片或者是过黑的图片进行修正,幂律变换的公式如下:

根据 φ 的大小,主要可分为一下两种情况:

  • φ > 1: 处理漂白的图片,进行灰度级压缩
  • φ < 1: 处理过黑的图片,对比度增强,使得细节看的更加清楚

import cv2

import imutils

import numpy as np

#幂律变换 φ>1
image = cv2.imread('img/aerial.jpg')
gamma_img1 = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.float32)
for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        gamma_img1[i, j, 0] = math.pow(image[i, j, 0], 5)
        gamma_img1[i, j, 1] = math.pow(image[i, j, 1], 5)
        gamma_img1[i, j, 2] = math.pow(image[i, j, 2], 5)
cv2.normalize(gamma_img1, gamma_img1, 0, 255, cv2.NORM_MINMAX)
gamma_img1 = cv2.convertScaleAbs(gamma_img1)
cv2.imshow('image', imutils.resize(image, 400))
cv2.imshow('gamma1 transform', imutils.resize(gamma_img1, 400))
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

#幂律变换,φ<1
image = cv2.imread('img/fractured_spine.jpg')
gamma_img2 = np.zeros((image.shape[0], image.shape[1], 3), dtype=np.float32)
for i in range(image.shape[0]):
    for j in range(image.shape[1]):
        gamma_img2[i, j, 0] = math.pow(image[i, j, 0], 0.4)
        gamma_img2[i, j, 1] = math.pow(image[i, j, 1], 0.4)
        gamma_img2[i, j, 2] = math.pow(image[i, j, 2], 0.4)
cv2.normalize(gamma_img2, gamma_img2, 0, 255, cv2.NORM_MINMAX)
gamma_img2 = cv2.convertScaleAbs(gamma_img2)
cv2.imshow('image', imutils.resize(image, 400))
cv2.imshow('gamma2 transform', imutils.resize(gamma_img2, 400))
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

3、分段线性变换之灰度分层

import cv2
import imutils
import numpy as np

#在某一范围(A, B)突出灰度,其他灰度值保持不变
image = cv2.imread('E:/peking_rw/ocr_project/base_prehandle/img/kidney.jpg')
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

r_left, r_right = 150, 230
r_min, r_max = 0, 255
level_img = np.zeros((gray_img.shape[0], gray_img.shape[1]), dtype=np.uint8)
for i in range(gray_img.shape[0]):
    for j in range(gray_img.shape[1]):
        if r_left <= gray_img[i, j] <= r_right:
            level_img[i, j] = r_max
        else:
            level_img[i, j] = gray_img[i, j]
            
cv2.imshow('origin image', imutils.resize(image, 480))
cv2.imshow('level image', imutils.resize(level_img, 480))
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

(openCV 十二)图像增强(对数变换/伽马变换/分段线性变换)相关推荐

  1. Java实现图像增强之伽马变换

    图像增强之伽马变换 接着上篇,我们再来说说伽马变换进行图像增强,实际上伽马变换利用的正式幂函数的特征,对输入的过暗或过亮的图像进行想要的变换.因此只有先了解幂函数,我们才能理解伽马变换的本质.照例我们 ...

  2. python实现对数转换_利用opencv在python平台上实现二值变换,伽马变换,对数变换,补色变换等...

    如何用 opencv 在 python 平台上实现灰度图像的二值化,对数变换, ,伽马变换以及补色变 换.代码如下 import cv2 import copy import math import  ...

  3. [Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. 数字图像处理-python基于opencv代码实现 反转变换、对数变换和幂律(伽马)变换

    本文主要介绍对<数字图像处理>第三章书中示例图片实现 反转变换.对数变换以及伽马变换的代码 若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意 ...

  5. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...

  6. 【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)

    [OpenCV 例程200篇]44. 图像的灰度变换(伽马变换) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 线性 ...

  7. 图像增强算法汇总(直方图均衡化、拉普拉斯、Log变换、gamma伽马变换)附MATLAB代码

    一.图像增强算法介绍 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...

  8. 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)

    一.图像增强算法原理 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...

  9. 数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

    数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换.对数变换.伽马变换和分段线性变换) 空间域处理是直接对像素进行操作的方法,这是相对于频率域处理而言的.空间域处理主要分为两大类:灰度变换 ...

  10. 数字图像处理(18): 图像灰度变换——线性灰度变换 和 非线性灰度变换(对数变换 与 伽马变换)

    目录 1 灰度变换简介 2 线性灰度变换­-图像反转 3 非线性灰度变换 3.1 对数变换 3.2 伽马变换 参考资料 1 灰度变换简介 灰度变换是图像增强的一种重要手段,用于改善图像显示效果,属于空 ...

最新文章

  1. php输出带的字符串吗,php输出含有“#”字符串的方法
  2. idea显示初始界面_Python基础 PyCharm 的初始设置
  3. 我对Node.js Core的首次贡献中学到了什么
  4. js 区分 safari chrome iso
  5. 总结一下内核DEBUG中的dump_stack, BUG, BUG_ON以及panic
  6. 专家解读EdgeRoutine边缘程序
  7. 对可操作对象的占用状态、锁定状态、解锁状态的一些方案
  8. sqlserver 2008安装总是弹出重启提示
  9. 为什么实际频率只有1.8G的AMD 2500+处理器运行速度比实际频率2.4G的P4-2.4B还快
  10. DIV制作浮在页面的窗口
  11. python导入鸢尾花数据集_数据可视化——鸢尾花数据集的分析与散点图的绘制
  12. 卸载软件时,出现解压缩支持文件时出错,灾难性故障--转载
  13. 读书寄语之体现人生智慧的9个字
  14. 产品 • 互联网产品经理和硬件产品经理
  15. 一生从未打过败仗的“杀神”白起是怎么死的?
  16. 云原生服务网格 Istio 1.4 部署指南
  17. instagram获取图片地址和视频地址
  18. ssh框架的学习之strut2小测试(2)
  19. 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
  20. jquery--拖拽效果

热门文章

  1. msm8953平台 ADC接口配置
  2. python执行bat文件_让Python文件也可以当bat文件运行
  3. 一文教会你导出微信聊天记录
  4. 原生小说APP源码,可二次开发,小说阅读,四端互通:android端,ios端,h5端,公众号端
  5. 计算机网络实习个人总结,(实习报告)计算机网络实训个人小结
  6. 怎么用计算机计算行列式,行列式计算器怎么使用,行列式计算器安装使用教程...
  7. retrofit + rxjava2报错java.lang.IllegalStateException:Excepted a String but was BEGIN_OBJECT at line..
  8. c语言abs和fabs的区别,c语言中abs()和fabs()的区别点整理
  9. 列举几个:MAC OS科研软件推荐
  10. 《路由器开发 - 路由器刷机指南》联想NWiFi3刷机