目录

  • 一些基本的灰度变换函数
    • 图像反转
    • 对数变换

一些基本的灰度变换函数

如下图显示了在图像处理中频繁使用的3类基本函数:

  • 线性(反转和恒等变换)函数
  • 对数(对数和反对数变换)函数
  • 幂律(nnn次幂和nnn次根变换)函数
# 灰度变换函数为了图像好看,归一化后再乘于255,缩放到相同的数值范围
x = np.arange(0, 256, 1)
x1 = x + 1equal   = normalize(x) * 255
revers  = (1 - normalize(x)) * 255
log     = normalize(np.log(x1)) * 255
n_sqrt  = normalize(np.power(x, 1/3)) * 255
n_power = normalize(np.power(normalize(x), 3)) * 255
log_1   = normalize(np.exp(log)) * 255plt.figure(figsize=(6, 6))
plt.plot(x, equal,   label='equal')
plt.plot(x, revers,  label='reversed')
plt.plot(x, log,     label='log')
plt.plot(x, n_sqrt,  label='n sqrt root')
plt.plot(x, n_power, label='n power')
plt.plot(x, log_1,   label='exp')plt.ylim([0, 256])
plt.xlim([0, 256])
plt.legend(loc='upper left')
plt.show()

图像反转

s=L−1−r(3.3)s = L-1 -r \tag{3.3}s=L−1−r(3.3)

采用这种方式反转图像的灰度级,会得到类似于照片底片的结果。这种类型的处理可用于增强图像暗色区域中的白色或灰色细节,暗色安全阀人尺寸很大时这种增强效果更好

# 图像反转,也可以缩放到[0, 1], 然后再用1减去
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH03/Fig0304(a)(breast_digital_Xray).tif', 0)
img_reversed = 256 - 1 - img_ori  # L = 2^8plt.figure(figsize=(18, 15))
plt.subplot(1, 2, 1), plt.imshow(img_ori, cmap='gray', vmin=0, vmax=255), plt.title('Original')
plt.subplot(1, 2, 2), plt.imshow(img_reversed, cmap='gray', vmin=0, vmax=255), plt.title('Reversed')
plt.tight_layout()
plt.show()

对数变换

s=c∗log(1+r)(3.4)s= c*log(1+r) \tag{3.4}s=c∗log(1+r)(3.4)

这个变换将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度级。相反,输入中的高灰度值则被映射为输出中范围较窄的灰度级。使用这类变换来扩展图像中的暗像素值,同时压缩高灰度级值。

反对数(指数)变换的功能正好相反。

# 对数变换
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH03/Fig0305(a)(DFT_no_log).tif', 0)#------------------------傅里叶变换
fft = np.fft.fft2(img_ori)
fft_shift = np.fft.fftshift(fft)   #中心化#------------------------直接显示变换后的频谱
amp = np.abs(fft_shift)
amp = np.uint8(normalize(amp) * 255)#------------------------对频谱进行对数变换后
amp_log = np.abs(np.log(1 + np.abs(fft_shift)))
amp_log = np.uint8(normalize(amp_log) * 255)plt.figure(figsize=(16, 6))
plt.subplot(1, 3, 1), plt.imshow(img_ori, cmap='gray', vmin=0, vmax=255), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 2), plt.imshow(amp, cmap='gray', vmin=0, vmax=255), plt.title('FFT result without log'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 3), plt.imshow(amp_log, cmap='gray', vmin=0, vmax=255), plt.title('FFT result with Long'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波2 - 图像反转、对数变换相关推荐

  1. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波1 - 灰度变换和空间滤波基础、Sigmoid激活函数

    这里写目录标题 本节的目标 背景 灰度变换和空间滤波基础 本节的目标 了解空间域图像处理的意义,以及它与变换域图像处理的区别 熟悉灰度变换所有的主要技术 了解直方图的意义以及如何操作直方图来增强图像 ...

  2. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波18 - 低通、高通、带阻和带通滤波器、组合使用空间增强方法

    低通.高通.带阻和带通滤波器 得到空间滤波器的第三种方法,生成一维滤波器函数,然后要么使用式(3.42)w=vvTw = vv^Tw=vvT生成二维可分离的滤波器函数,要么旋转这些一维函数来生成二维核 ...

  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)

    目录 锐化(高通)空间滤波器 使用一阶导数锐化图像-梯度 锐化(高通)空间滤波器 平滑通过称为低通滤波 类似于积分运算 锐化通常称为高通滤波 微分运算 高过(负责细节的)高频,衰减或抑制低频 使用一阶 ...

  4. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波15 - 锐化高通滤波器 -拉普拉斯核(二阶导数)

    目录 锐化(高通)空间滤波器 基础 - 一阶导数和二阶导数的锐化滤波器 二阶导数锐化图像--拉普拉斯 锐化(高通)空间滤波器 平滑通过称为低通滤波 类似于积分运算 锐化通常称为高通滤波 微分运算 高过 ...

  5. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波8 - 直方图处理 - 直方图均衡化(全局直方图均衡化)

    直方图均衡化 灰度映射函数: s=T(r),0≤r≤L−1(3.8)s = T(r), \quad 0\leq r \leq L -1 \tag{3.8}s=T(r),0≤r≤L−1(3.8) 假设: ...

  6. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波16 - 锐化高通滤波器 - 钝化掩蔽和高提升滤波

    目录 锐化(高通)空间滤波器 钝化掩蔽和高提升滤波 锐化(高通)空间滤波器 平滑通过称为低通滤波 类似于积分运算 锐化通常称为高通滤波 微分运算 高过(负责细节的)高频,衰减或抑制低频 钝化掩蔽和高提 ...

  7. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波13 - 平滑低通滤波器 -盒式滤波器核

    这里写目录标题 平滑(低通)空间滤波器 盒式滤波器核 平滑(低通)空间滤波器 平滑(也称平均)空间滤波器用于降低灰度的急剧过渡 在图像重取样之前平滑图像以减少混淆 用于减少图像中无关细节 平滑因灰度级 ...

  8. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波11 - 直方图处理 - 使用直方图统计量增强图像

    使用直方图统计量增强图像 全局均值和方差 μn=∑i=0L−1(ri−m)np(ri)(3.24)\mu_{n} = \sum_{i=0}^{L-1} (r_{i} - m)^{n} p(r_{i}) ...

  9. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波10 - 直方图处理 - 局部直方图处理

    这里写目录标题 局部直方图处理 局部直方图处理 因为像素是由基于整个图像的灰度的变换函数修改的.这种全局性方法适合于整体增强,但当目的是增强图像中几个小区域的细节时,通常就会失败.这是因为在这些小区域 ...

最新文章

  1. SEO之网站页面优化策略
  2. docker设置固定ip地址
  3. Win32下内存分配简单示例 - 使用CFree
  4. python 移动运算符的理解
  5. [蓝桥杯]2016蓝桥省赛B组题目及详解
  6. html坐标绘制路径,canvas学习笔记之绘制简单路径
  7. 把CNN里的乘法全部去掉会怎样?华为提出移动端部署神经网络新方法
  8. BZOJ1052:[HAOI2007]覆盖问题
  9. OpenDRIVE地图图形化
  10. 常用的功率半导体器件汇总
  11. PS中部分常用快捷键整理
  12. Qt中可执行文件如何添加ICON图标
  13. 存量用户时代,方兴未艾的客户服务SaaS
  14. Ubuntu的以太网卡找不到解决方法
  15. win10系统蓝牙耳机的连接与连接后无法听到声音
  16. TT 的美梦(SPFA)
  17. 前端程序员偷懒工具:emmet语法
  18. Kalman详尽原理介绍合集
  19. C++应用之自定义大整数类
  20. 解决APP抓包问题【网络安全】

热门文章

  1. Angular Forms - 自定义 ngModel 绑定值的方式
  2. 每一次突破都是一种进步
  3. iOS sha1加密算法
  4. 修改vim中的tab为4个空格
  5. VS2012生成事件
  6. VLC 学习计划---文档阅读
  7. 搭建Mock Server
  8. AutowireCapableBeanFactory接口
  9. javascript --- 判断只有1个为真
  10. 传锤子科技解散成都分公司 才搬迁一年罗永浩就顶不住了