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);分析以及解决方…...
能源管理师:薪资待遇、技能知识与职业发展路景全解析
能源管理师作为一种新兴职业,近年来受到了越来越多的关注。他们在能源领域发挥着重要的作用,帮助企业和组织优化能源使用、降低成本并实现可持续发展。本文将详细介绍能源管理师的薪资待遇、所需具备的技能知识以及职业发展路景。 一、薪资待遇 能源管…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...