广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python图像运算之顶帽运算和底帽运算详解
  • 421
分享到

Python图像运算之顶帽运算和底帽运算详解

2024-04-02 19:04:59 421人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一.图像顶帽运算二.图像底帽运算三.总结一.图像顶帽运算 图像顶帽运算(top-hat transfORMation)又称为图像礼帽运算,它是用原始图像减去图像开运算后的结果,常

一.图像顶帽运算

图像顶帽运算(top-hat transfORMation)又称为图像礼帽运算,它是用原始图像减去图像开运算后的结果,常用于解决由于光照不均匀图像分割出错的问题。其公式定义如下:

图像顶帽运算是用一个结构元通过开运算从一幅图像中删除物体,顶帽运算用于暗背景上的亮物体,它的一个重要用途是校正不均匀光照的影响。其效果图如图1所示。

python中,图像顶帽运算主要调用morphologyEx()实现,其中参数cv2.MORPH_TOPHAT表示顶帽处理,函数原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

  • src表示原始图像
  • cv2.MORPH_TOPHAT表示图像顶帽运算
  • kernel表示卷积核,可以用numpy.ones()函数构建

假设存在一张光照不均匀的米粒图像,如图2所示,我们需要调用图像顶帽运算解决光照不均匀的问题。

图像顶帽运算的Python代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10,10), np.uint8)

#图像顶帽运算
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waiTKEy(0)
cv2.destroyAllwindows()

其运行结果如图3所示。

下图展示了“米粒”顶帽运算的效果图,可以看到顶帽运算后的图像删除了大部分非均匀背景,并将米粒与背景分离开来。

为什么图像顶帽运算会消除光照不均匀的效果呢?

通常可以利用灰度三维图来进行解释该算法。灰度三维图主要调用Axes3D包实现,对原图绘制灰度三维图的代码如下:

# -*- coding: utf-8 -*-
# By:Eastmount
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

#读取图像
img = cv.imread("test02.png")
img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
imgd = np.array(img)      #image类转numpy

#准备数据
sp = img.shape
h = int(sp[0])        #图像高度(rows)
w = int(sp[1])        #图像宽度(colums) of image

#绘图初始处理
fig = plt.figure(figsize=(16,12))
ax = fig.GCa(projection="3d")

x = np.arange(0, w, 1)
y = np.arange(0, h, 1)
x, y = np.meshgrid(x,y)
z = imgd
surf = ax.plot_surface(x, y, z, cmap=cm.coolwarm)  

#自定义z轴
ax.set_zlim(-10, 255)
ax.zaxis.set_major_locator(LinearLocator(10))   #设置z轴网格线的疏密

#将z的value字符串转为float并保留2位小数
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

# 设置坐标轴的label和标题
ax.set_xlabel('x', size=15)
ax.set_ylabel('y', size=15)
ax.set_zlabel('z', size=15)
ax.set_title("surface plot", weight='bold', size=20)

#添加右侧的色卡条
fig.colorbar(surf, shrink=0.6, aspect=8)  
plt.show()

运行结果如图5所示,其中x表示原图像中的宽度坐标,y表示原图像中的高度坐标,z表示像素点(x, y)的灰度值。

从图像中的像素走势显示了该图受各部分光照不均匀的影响,从而造成背景灰度不均现象,其中凹陷对应图像中灰度值比较小的区域。

通过图像白帽运算后的图像灰度三维图如图6所示,对应的灰度更集中于10至100区间,由此证明了不均匀的背景被大致消除了,有利于后续的阈值分割或图像分割。

绘制三维图增加的顶帽运算核心代码如下:

二.图像底帽运算

图像底帽运算(bottom-hat transformation)又称为图像黑帽运算,它是用图像闭运算操作减去原始图像后的结果,从而获取图像内部的小孔或前景色中黑点,也常用于解决由于光照不均匀图像分割出错的问题。其公式定义如下:

图像底帽运算是用一个结构元通过闭运算从一幅图像中删除物体,常用于校正不均匀光照的影响。其效果图如图8所示。

在Python中,图像底帽运算主要调用morphologyEx()实现,其中参数cv2.MORPH_BLACKHAT表示底帽或黑帽处理,函数原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

  • src表示原始图像
  • cv2.MORPH_BLACKHAT表示图像底帽或黑帽运算
  • kernel表示卷积核,可以用numpy.ones()函数构建

Python实现图像底帽运算的代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  

#读取图片
src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((10, 10), np.uint8)

#图像黑帽运算
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

其运行结果如图9所示:

三.总结

该系列主要讲解了图像数学形态学知识,结合原理和代码详细介绍了图像腐蚀、图像膨胀、图像开运算和闭运算、图像顶帽运算和图像底帽运算等操作。这篇文章详细介绍了顶帽运算和底帽运算,它们将为后续的图像分割和图像识别提供有效支撑。

到此这篇关于Python图像运算之顶帽运算和底帽运算详解的文章就介绍到这了,更多相关Python 顶帽运算 底帽运算内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python图像运算之顶帽运算和底帽运算详解

本文链接: https://www.lsjlt.com/news/119610.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python图像运算之顶帽运算和底帽运算详解
    目录一.图像顶帽运算二.图像底帽运算三.总结一.图像顶帽运算 图像顶帽运算(top-hat transformation)又称为图像礼帽运算,它是用原始图像减去图像开运算后的结果,常...
    99+
    2022-11-11
  • Python图像运算之图像点运算与灰度化处理详解
    目录一.图像点运算概念二.图像灰度化处理三.基于像素操作的图像灰度化处理1.最大值灰度处理方法2.平均灰度处理方法3.加权平均灰度处理方法四.总结一.图像点运算概念 图像点运算(Po...
    99+
    2022-11-13
  • 详解Python图像形态学处理(开运算,闭运算,梯度运算)
    目录一.图像开运算二.图像闭运算三.图像梯度运算四.总结这篇文章将继续介绍开运算、闭运算和梯度运算。数学形态学(Mathematical Morphology)是一种应用于图像处理和...
    99+
    2022-11-11
  • Python图像处理之图像算术与逻辑运算详解
    目录一.图像加法运算二.图像减法运算三.图像与运算四.图像或运算五.图像非运算六.图像异或运算七.总结一.图像加法运算 图像加法运算主要有两种方法。第一种是调用Numpy库实现,目标...
    99+
    2022-11-13
  • 详解python opencv图像混合算术运算
    目录图片相加 cv2.add()       按位运算图片相加 cv2.add() ...
    99+
    2022-11-12
  • Python图像运算之图像阈值化处理详解
    目录一.图像阈值化二.固定阈值化处理1.二进制阈值化2.反二进制阈值化3.截断阈值化4.阈值化为05.反阈值化为0三.自适应阈值化处理四.总结一.图像阈值化 图像阈值化(Binari...
    99+
    2022-11-10
  • Python中图像算术运算的示例详解
    目录介绍算术运算:图像相加算术运算:图像减法位运算介绍 还记得你在小学时学习如何加减数字吗?现在,你也可以对图像做同样的事情! 输入图像可以进行算术运算,例如加法、减法和按位运算(A...
    99+
    2022-11-10
  • 详解图像上的OpenCV算术运算
    目录OpenCV 简介添加图像图像减法位运算图像的 AND 位运算图像的 OR 位运算图像的NOT位运算图像的 XR 位运算OpenCV的结论OpenCV 简介 图像可以进行算术运算...
    99+
    2022-11-11
  • Python图像运算之腐蚀与膨胀详解
    目录前言一.形态学理论知识二.图像腐蚀三.图像膨胀四.总结前言 这篇文章将详细讲解开始图像形态学知识,主要介绍图像腐蚀处理和膨胀处理。数学形态学(Mathematical Morph...
    99+
    2022-11-10
  • Python-OpenCV教程之图像的位运算详解
    1、按位取反bitwise_not() 按位取反就是将数值根据每个bit位1变0,0变1,比如0xf0按位取反就变成了0x0f,如果是uint8类型的数据,取反前...
    99+
    2022-11-12
  • Python图像运算之图像灰度线性变换详解
    目录一.灰度线性变换二.图像灰度上移变换三.图像对比度增强变换四.图像对比度减弱变换五.图像灰度反色变换六.总结一.灰度线性变换 图像的灰度线性变换是通过建立灰度映射来调整原始图像的...
    99+
    2022-11-13
  • Python图像运算之图像灰度直方图对比详解
    目录一.灰度增强直方图对比二.灰度减弱直方图对比三.图像反色直方图对比四.图像对数变换直方图对比五.图像阈值化处理直方图对比六.总结一.灰度增强直方图对比 图像灰度上移变换使用的表达...
    99+
    2022-11-11
  • Python图像运算之图像灰度非线性变换详解
    目录一.图像灰度非线性变换二.图像灰度对数变换三.图像灰度伽玛变换四.总结一.图像灰度非线性变换 原始图像的灰度值按照DB=DA×DA/255的公式进行非线性变换,其代码...
    99+
    2022-11-13
  • Python图像运算之图像掩膜直方图和HS直方图详解
    目录一.图像掩膜直方图二.图像HS直方图三.直方图判断白天黑夜四.总结一.图像掩膜直方图 如果要统计图像的某一部分直方图,就需要使用掩码(蒙板)来进行计算。假设将要统计的部分设置为白...
    99+
    2022-11-11
  • Python全栈之运算符详解
    目录1. 算数_比较_赋值_成员1.1 算数运算符1.2 比较运算符1.3 赋值运算符1.4 成员运算符2. 身份运算符小提示:3. 逻辑运算符3.1 位运算符3.2 小总结4. 代...
    99+
    2022-11-12
  • Python 3 之 运算符重载详解
    基础知识实际上,“运算符重载”只是意味着在类方法中拦截内置的操作……当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果。以下是对重载的关键概念的复习:运算符重载让类拦截常规的Python运算。...
    99+
    2023-01-31
    详解 运算符 Python
  • python注释和运算符详解
    目录1.多文件项目演练2.注释(解释器不会解释#右侧内容)2.1单行注释(行注释) 2.2多行注释(块注释)3.算术运算符3.1运算符3.2优先级 总结 1.多文件项目演练 在day...
    99+
    2022-11-12
  • 浅谈Python实现opencv之图片色素的数值运算和逻辑运算
    数值运算 代码: # -*- coding=GBK -*- import cv2 as cv # 数值运算:加减乘除 def shu_image(src11, src22...
    99+
    2022-11-12
  • Python中运算符"=="和"is"的详解
    前言 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断...
    99+
    2022-06-04
    详解 运算符 Python
  • Python线性点运算数字图像处理示例详解
    目录点运算定义分类线性点运算分段线性点运算非线性点运算对数变换幂次变换点运算 定义 分类 线性点运算 例子: 分段线性点运算 非线性点运算 对数变换 幂次变换 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作