Python图像处理之光斑分析
文章目录
- 质心
- 目标截取
- 光斑半径
python图像处理教程:初步📷插值变换📷形态学处理📷滤波
光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。
质心
所谓质心,就是质量的中心,连续物体的质心可表示为 ∫ x f ( x ) d x ∫ f ( x ) d x \frac{\int xf(x)\text dx}{\int f(x)\text dx} ∫f(x)dx∫xf(x)dx,则图像质心可表示为
x ˉ = ∑ i p i j ∑ p i j y ˉ = ∑ j p i j ∑ p i j \bar x = \frac{\sum ip_{ij}}{\sum p_{ij}}\quad \bar y = \frac{\sum jp_{ij}}{\sum p_{ij}} xˉ=∑pij∑ipijyˉ=∑pij∑jpij
由于图像是二维数组,有两个可以操作的方向,故而除了全局的质心外,其每一行或每一列均有一个质心,行质心和列质心的交叉点,就是图像的质心,图像如下,左侧为原始光斑,右侧为其行质心和列质心。

绘图代码如下,考虑到求质心时,有一个求和项需要做除数,所以在求质心之前,将图像加上 1 0 − 9 10^{-9} 10−9,以确保不会出现除0错误,同时不会对质心造成干扰。
from numpy as np
import matplotlib.pyplot as plt# 创建一副光斑图像
size = [256,256]
x, y = np.indices(size)
d2 = (x-80)**2+(y-80)**2
img = 255*np.exp(-d2/32)# 求行质心和列质心
arr = np.arange(256).reshape(-1,1)cImg = img + 1e-9
cenRow = (cImg @ arr).reshape(-1)/np.sum(cImg, 0)
cenCol = (cImg.T @ arr).reshape(-1)/np.sum(cImg, 1)# 绘图
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.imshow(img, cmap='gray')ax2 = fig.add_subplot(122, sharey=ax1)
ax2.tick_params(axis="y", labelleft=False)
arr = arr.reshape(-1)
plt.imshow(img)
plt.plot(arr, cenRow)
plt.plot(cenCol,arr)
plt.show()
目标截取
由于光斑只占据图片中很小一部分,大量的冗余信息等同于噪声,会影响数据处理,故需截取感兴趣的区域。【plt.ginput】函数提供一种交互操作方法,可返回鼠标点击的位置,其输入参数为选取点数,输出为点击的点的坐标。根据返回的点的位置,即可对图像进行截取。
plt.imshow(img)
p1, p2 = plt.ginput(2)roi = img[int(p1[1]):int(p2[1]), int(p1[0]):int(p2[0])]
在本例中, p 1 , p 2 p_1, p_2 p1,p2两点分别在左上角和右下角,从而无论 x x x还是 y y y, p 1 p_1 p1的值均小于 p 2 p_2 p2。另一方面,ginput的返回值是 ( x , y ) (x,y) (x,y)坐标,而矩阵截取过程则是先行后列,行对应的是 y y y,这就是roi在截取时的选区逻辑。
最终截取结果如下。

fig = plt.figure()
ax = fig.add_subplot(121)
plt.imshow(roi)ax = fig.add_subplot(122, projection='3d')
yGrid, xGrid = np.indices(roi.shape)
ax.plot_surface(yGrid, xGrid, roi)
plt.show()
光斑半径
一般来说,Gauss光束以其强度最大值的 1 e \frac{1}{e} e1处为边界,也就是说,最简单的求解光斑半径的方法,就是统计所有边界内部的点的个数,然后再根据圆面积公式求取其半径。
area = np.sum(roi>255/np.e)
r = np.sqrt(area/np.pi)
# 5.56
另一种方法,则需对光斑的某一维度进行高斯拟合。具体方法是对roi按列求最大值,然后对得到的数组进行高斯拟合,最终得到半径值 r = 5.65 r=5.65 r=5.65,显然更接近于我们最开始设定的 32 \sqrt{32} 32,其拟合结果如下。

from scipy.optimize import curve_fit
def gauss(x, a, b, c):return a*np.exp(-(x-b)**2/c**2)y = np.max(roi,0)
x = np.arange(len(y))abc, para = curve_fit(gauss,x,y)
print(abc) #即上式中的a,b,c
# [255. 19. 5.65685425]
Y = gauss(x,abc[0],abc[1],abc[2]) #拟合值
plt.scatter(x,y, label="origin") #绘制原始数据的散点图
plt.plot(x,Y, label="curve_fit") #绘制拟合数据的曲线图
plt.legend()
plt.show()
相关文章:
Python图像处理之光斑分析
文章目录 质心目标截取光斑半径 python图像处理教程:初步📷插值变换📷形态学处理📷滤波 光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标…...
软件测试 - 测试用例基本理论
1. 概念 为了特定的目的(该目的是检验代码是否满足用户需求)而设计的文档,文档包含测试输入、执行条件、预期结果等。文档的形式一般是excel表格。 比如说我们买了一台电脑,新买的笔记本检查完外观之后第一步需要查看电脑是否能够正常开机,…...
在 Flutter 中使用 flutter_gen 简化图像资产管理
你是否厌倦了在 Flutter 项目中手动管理图像资产的繁琐任务? 告别手工输入资源路径的痛苦,欢迎使用“Flutter Gen”高效资源管理的时代。在本文中,我将带您从手动处理图像资源的挫折到动态生成它们的便利。 选择1:痛苦手动添加–…...
两天学会微服务网关Gateway-Gateway过滤器
锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…...
图像处理 mask掩膜
1,图像算术运算 图像的算术运算有很多种,比如两幅图像可以相加,相减,相乘,相除,位运算,平方根,对数,绝对值等;图像也可以放大,缩小,旋…...
信驰达ESP32-C3/RTL8720CM WiFi开发板RF-WT01上线
为方便客户快速选型和验证WiFi模块,深圳市信驰达科技有限公司推出了WiFi开发板RF-WT01,支持适配信驰达RF-WM-ESP32B1、RF-WM-20CMB1、RF-WM-11AFB1、RF-WM-20DNB1 4款WiFi串口模块使用,方便客户实现对信驰达WiFi模块的快速测试和评估。 图1RF…...
【产品经理方法论——产品的基本概念】
1. 产品学三元素 产品学有三个元素:用户、需求、产品 产品学的内容:根据用户的需求设计产品,使用产品服务用户 仅仅通过三个元素无法说明每个元素的概念,因为三个元素互为说明关系。 通过引入人/群体来说明三个元素的关系。 需…...
推特API(Twitter API)V2 查询用户信息
前面章节已经介绍使用code换取Token的整个流程了,这里不再重复阐述了,下面我们介绍如何使用Token查询用户信息等操作。 1.引入相关依赖Maven <dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-co…...
在Elasticsearch IK分词器中更新、停用某些专有名词
在Elasticsearch IK分词器中更新、停用某些专有名词 目前IK分词器对于现有的新名词或者流行语没有做区分比如"白嫖" “奥利给”,或者对一些没有用的字比如 “的” "地"进行分词其实没有必要过多的分词只会占用宝贵的内存空间,所以如…...
时钟显示 html JavaScript
sf.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>时间</title><script>function showTime(){var timenew Date();var datetime.getDate();var yeartime.getFullYear();var monthtime.getMonth()1;var …...
List<Object>集合对象属性拷贝工具类
目录 问题现象: 问题分析: 解决方法: 问题现象: 最近在项目中经常会使用到BeanUtils工具类来作对象的属性字段拷贝,但如果应用到List集合的话就需要遍历去操作了,如下: 打印结果: …...
请说明Vue中的异步组件加载
Vue中的异步组件加载是指当页面需要渲染某个组件时,可以在需要时再去加载这个组件,而不是在页面初始化的时候就将所有组件一次性加载进来。这种方式能够有效降低页面的初始加载时间,提升用户体验。 在Vue中,我们可以使用import函…...
目标检测5:采用yolov8, RK3568上推理实时视频流
上一个效果图,海康球机对着电脑屏幕拍,清晰度不好。 RK3568接取RTSP视频流,通过解码,推理,编码,最终并把结果推出RTSP视频流。 数据集采用coco的80个种类集,通过从yovo8.pt,转换成R…...
微服务:Feign篇
1.什么是Feign Feign是一种声明式、模板化的HTTP客户端,可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口,可以实现简单和可重用的RPC调用。 先来看我们以前利用RestTemplate发起远程调用的代码ÿ…...
基于chatgpt的聊天机器人
基于chatgpt的聊天机器人 以下是一个基于Python的示例代码,展示如何在本地环境中使用预训练的ChatGPT模型构建一个简单的聊天机器人应用程序。在这个示例中,我们将使用Hugging Face Transformers库加载GPT-2模型,并创建一个基于命令行的用户…...
BAT常见的20道Android面试题详解,我的头条面试经历分享
二、面试 下面主要列举下在面试过程中遇到过的剑指 offer 原题或者类似问题,大家应该清楚,面试过程中遇到原题不要太高兴,而刷剑指 offer 就能让遇到原题的可能性大大增加。 1.字节跳动春招 面试题 68 - II. 二叉树的最近公共祖先 2.京东…...
python66-Python的循环之常用工具函数
使用zip()函数可以把两个列表“压缩”成一个zip对象(可迭代对象),这样就可以使用一个循环并行遍历两个列表。为了测试 zip()函数的功能,我们可以先在交互式解释器中“试验”一下该函数的功能。 # !/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2024/01# @Author : …...
Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)
接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。 一:最终效果 首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效 二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的…...
MATLAB报错:尝试将 SCRIPT imread 作为函数执行
报错: 在执行matlab脚本的时候出现报错。 >> imread 尝试将 SCRIPT imread 作为函数执行: S:\temp_file\matlab\DigitalImageProcessing\imread.m出错 imread (line 2) I imread(S:\temp_file\matlab\DigitalImageProcessing\blueman.png);分析以及解决方…...
能源管理师:薪资待遇、技能知识与职业发展路景全解析
能源管理师作为一种新兴职业,近年来受到了越来越多的关注。他们在能源领域发挥着重要的作用,帮助企业和组织优化能源使用、降低成本并实现可持续发展。本文将详细介绍能源管理师的薪资待遇、所需具备的技能知识以及职业发展路景。 一、薪资待遇 能源管…...
罗技鼠标宏完整实现方案:从Lua脚本到PUBG精准射击的进阶指南
罗技鼠标宏完整实现方案:从Lua脚本到PUBG精准射击的进阶指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在竞技射击游戏《绝地求…...
别再只会真彩色了!用ENVI玩转波段组合:揭秘植被红、水体蓝背后的遥感密码
遥感图像解译的艺术:ENVI波段组合背后的科学密码 当一张卫星遥感图像首次展现在眼前时,未经训练的眼睛往往只能看到一片模糊的色块。然而,对于掌握波段组合奥秘的解译专家来说,这些色彩背后隐藏着丰富的地表信息——健康的植被、水…...
Zabbix监控华为防火墙丢包?可能是你的SNMP v2c配置没做对(附Python巡检脚本)
Zabbix监控华为防火墙丢包问题的深度排查与自动化解决方案 当Zabbix监控华为防火墙时出现丢包或数据异常,很多工程师的第一反应是检查网络连通性或Zabbix服务器配置,却忽略了防火墙自身SNMP v2c与安全策略的联动机制。本文将揭示这一常见误区的技术根源&…...
SOCD Cleaner:游戏按键智能优化工具,告别操作冲突的终极方案
SOCD Cleaner:游戏按键智能优化工具,告别操作冲突的终极方案 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏和动作游戏中,精准的操作响应是胜利的关键。然而&…...
TortoiseGit实战:用‘拣选’功能精准移植单个提交,告别全量合并的烦恼
TortoiseGit实战:用‘拣选’功能精准移植单个提交,告别全量合并的烦恼 在团队协作开发中,我们常常遇到这样的场景:测试分支(feature/hotfix)中某个关键Bug修复已经验证通过,但该分支还包含大量未…...
美股api的WebSocket偶尔断连,心跳间隔设多少秒最合适?
做美股相关的数据服务时,我碰到一个小烦恼:WebSocket连接偶尔断开。尤其是实时tick数据,程序明明还在跑,提示“断开”,有时候还挺突然的。我自己测试了不少方法,发现心跳设置是最容易影响稳定性的一个点。 …...
2026最新论文降AI全攻略:亲测5大高质量工具,掌握免费Prompt指令顺利交稿
为了找到真正靠谱的解决方案,我过去测试了市面上大部分号称能降低ai率的方法。从一分钱不花的模型指令,到各种付费的专业降ai率工具,用手头的文本做了几十次实操对比。说心里话,里面套路确实不少,有些方法用完后语句颠…...
51单片机IO口不够用?试试用PCF8574模块驱动LCD1602,I2C接口省下6个引脚
51单片机IO资源紧张?PCF8574模块驱动LCD1602的实战指南 当你用51单片机开发项目时,是否遇到过这样的困境:传感器、按键、通信接口已经占用了大部分IO口,而显示模块却无处安放?传统驱动LCD1602需要6-8个IO引脚ÿ…...
TPS5450同步降压转换器设计:从宽压输入到5V/3.3V输出的工程实践
1. 项目概述与芯片选型考量最近在做一个需要从较高直流电压(比如12V或24V)降压到5V和3.3V为系统供电的项目,电流需求还不小,峰值可能达到3A以上。这种场景下,传统的线性稳压器(LDO)效率太低&…...
别再只用JSON了!聊聊Qt里QDataStream的二进制序列化优势与避坑指南
二进制序列化新选择:Qt中QDataStream的高效实践与深度解析 在Qt开发者的工具箱里,JSON和XML常被视为数据交换的默认选择,但当面对高性能、紧凑存储或跨版本兼容性需求时,二进制序列化方案往往能带来意想不到的优势。QDataStream作…...
