python打造光斑处理系统4:裁切光斑感兴趣区域

news2025/2/22 5:52:41

文章目录

    • 图像裁切
    • 给定坐标裁切
    • 手动阈值裁切

光斑处理:python处理高斯光束的图像
光斑处理系统:程序框架🌟打开图像🌟参数对话框/伪彩映射

图像裁切

一般来说,光斑只占图像很小一部分,为了更好的观感和更小的误差,将背底区域截掉是一个必要的选择,为此需要实现图像裁切功能,即选中感兴趣的区域(ROI)

而选中ROI,其实有多种方案,比如

  1. ‘roi’ 直接给定起始 x x x y y y坐标
  2. ‘thres’ 手动阈值裁切
  3. ‘auto’ 自动阈值裁切
  4. ‘click’ 点击举行的对角点,手动选择区域

下面逐一实现。

给定坐标裁切

首先,为裁切功能设置一个参数对话框,其内容包括裁切模式,当处于手动阈值裁切时,需要设置阈值,最后,当给定坐标时,需要设置坐标的起始位置,累计下列6个参数。

class AnaFacula():
    # 前面省略,后面凡是带有self参数的函数,均写在AnaFacula中
    def init_param(self):
        # 前面省略
        # 剪切参数
        self.cutPara = {
            "mode":"click",
            "thres":10.0,
            "xStart":0,
            "xEnd":0,
            "yStart":0,
            "yEnd":0,
        }

然后修改img_cut函数,从裁切的流程出发,无论采取何种模式,最终势必需要通过起止位置来完成裁切,所以先建立一个通用的裁切函数。

    def imgCut(self):
        self.img = self.img[
            self.cutPara['yStart']:self.cutPara['yEnd'],
            self.cutPara['xStart']:self.cutPara['xEnd']]
        self.imgShow()

而对于前面提到的四种方案而言,只有第一种,即roi模式下,才会直接执行imgCut,所以img_cut可暂时写为下面的形式,换言之,其他三种模式都需要对cutValue进行更新。

    def img_cut(self):
        flag, cutPara = inputValue(self.cutPara)
        if not flag:
            return
        for key in cutPara:
            if key != None:
                self.cutPara[key] = cutPara[key]

        if cutPara['mode'] == 'auto':
            pass
        elif cutPara['mode'] == 'thres':
            pass
        elif cutPara['mode'] == 'click':
            pass
        self.imgCut()

修改完成后,在裁切之后,再次打开裁切按钮,其参数会更新为上次设置的参数,切割效果如下

在这里插入图片描述

手动阈值裁切

所谓手动阈值裁切,就是通过一个阈值对图像二值化,然后统计大于这个阈值的像素个数,假设这些像素围成一个圆形,那么由此可得到这个圆形的半径。再通过求取图像的质心,即可得到一个正方形的区域,可作为裁切的标记。

def getROI(img,thres=None):
    m, n = img.shape
    img = img + 0           # 深拷贝
    img[img<thres] = 0      # 背底置零
    radius = np.sqrt(np.sum(img>0)/np.pi)

    allSum = np.sum(img)
    if allSum == 0:
        return None

    yC = np.sum(np.sum(img,1)*np.arange(m))/allSum
    xC = np.sum(np.sum(img,0)*np.arange(n))/allSum

    xStart = max(0,int(xC-radius))
    xEnd = min(m,int(xC+radius))
    yStart = max(0,int(yC-radius))
    yEnd = min(n,int(yC+radius))
    print(radius, xStart)

    return {'xStart':xStart, 'xEnd':xEnd, 'yStart':yStart, 'yEnd':yEnd}

相应地,修改thres模式下的代码。

        elif cutPara['mode'] == 'thres':
            roi = getROI(self.img, self.cutPara['thres'])
            for key in roi:
                self.cutPara[key] = roi[key]

手动阈值裁切效果如下

在这里插入图片描述

自动阈值只比手动阈值多了一个求阈值的操作,可采取OTSU算法,由于算法严格来说并不算是业务流程的内容,所以放在后面有空再将;通过点击的方式实现区域选取,则需要新建一个鼠标响应函数,相对来说较为复杂,故而也放在后面讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1424227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle 面试题 | 04.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

中国城市统计年鉴,多种数据格式可用,时间覆盖1995-2022年

基本信息. 数据名称: 中国城市统计年鉴 数据格式: pdf、jpg、excel、html不定 数据时间: 1995-2021不定 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;国家统计局 示例数据: 目录一、全国城市行政区划1-1 城市行政区划和区域分布1-2 分地区城市情况一…

隧道穿越:隧道穿透技术介绍

后面会进行一些隧道穿越的实验&#xff0c;因此在本篇中这里先介绍一些有关隧道穿越的技术知识点 隧道和隧道穿透 隧道是一种通过互联网基础设施在网络之间传递数据的方式&#xff0c;设计从数据封装、传输到解包的全过程&#xff0c;使用隧道传递的数据&#xff08;或者负载…

存内计算——发展史与近期成果

存内计算的概念早在上个世纪就已经被提出&#xff0c;但当时的人们寄希望于通过优化处理器设计以及工艺制程的升级&#xff0c;来获得性能和能效比的提升&#xff0c;存内计算的研究仅停留在理论阶段。随着大数据时代的到来&#xff0c;存内计算由于其结构特点以及摩尔定律的“…

WiFi基础知识介绍(超详细)

1.WiFi专业名词概念 AP(Access Point):无线接入点&#xff1a;这个概念特别广&#xff0c;在这里&#xff0c;用大白话说&#xff0c;你可以把CC3200当做一个无线路由器&#xff0c;这个路由器的特点不能插入网线&#xff0c;没有接入Internet&#xff0c;只能等待其他设备的链…

springCloud gateway 防止XSS漏洞

springCloud gateway 防止XSS漏洞 一.XSS(跨站脚本)漏洞详解1.XSS的原理和分类2.XSS漏洞的危害3.XSS的防御 二.Java开发中防范XSS跨站脚本攻击的思路三.相关代码&#xff08;适用于spring cloud gateway&#xff09;1.CacheBodyGlobalFilter.java2.XssRequestGlobalFilter.java…

CAS和自旋的区别

一、前言 我们在面试的时候&#xff0c;经常性的会遇到一些关于锁的问题&#xff0c;尤其是面试官会提出问题&#xff1a;你对锁的了解多么&#xff1f;你知道锁的原理么&#xff1f;等等问题&#xff0c;于是也就会有后续延伸出来的&#xff1a;你知道CAS么&#xff1f;你知道…

Habitat环境学习二:导航任务中的Habitat-sim基础Habitat-sim Basics for Navigation

导航任务在Habitat-sim任务中的实现 官方教程概述重要概念1、Hello World程序1.0.1 基础设置Basic settings1.0.2 模拟器设置Configurations for the simulator1.0.3 创建模拟器实例1.0.4 初始化Agent1.0.5 导航和探索 官方教程 Habitat是一个高效的真实的3D模拟器&#xff0c…

基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点 面向对象程序设计的基本特点包括&#xff1a;抽象、封装、继承、多态。 抽象 抽象是指对具体问题或对象进行概括&#xff0c;抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象&#xff0c;其中数据抽象是指一个对象区别于另…

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法

1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)

第 10 章:在C++中使用协程进行系统编程

最后一章专门介绍了一项对系统编程非常有用的功能&#xff0c;但这在C标准中相对较新。协程对象迅速找到了应用&#xff0c;成为了一等公民的状态机对象。它们的强大之处在于隐藏了协程帧后面的逻辑。请注意&#xff0c;这是一个高级主题&#xff0c;且C的协程接口既不简单也不…

216961-98-7,BODIPY 493/503 NHS 活化酯,可以应用于分子生物学等领域中

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;216961-98-7&#xff0c;BODIPY 493/503 NHS 活化酯&#xff0c;BODIPY 493/503 NHS ester&#xff0c;BODIPY 493/503 SE 一、基本信息 产品简介&#xff1a;BODIPY 493/503 NHS ester是一种特殊的染料&#xff0c…

【lesson4】高并发内存池ThreadCache(线程缓存)层实现

文章目录 ThreadCache层的结构申请内存逻辑释放内存逻辑自由链表的实现自由链表的成员变量自由链表的成员函数自由链表的完整实现 ThreadCache申请内存过程的实现ThreadCache需要的成员变量ThreadCache需要的成员函数ThreadCache.h文件代码Allocate的实现Deallocate的实现 封装…

02、全文检索 ------ Solr(企业级的开源的搜索引擎) 的下载、安装、Solr的Web图形界面介绍

目录 Solr 的下载和安装Solr的优势&#xff1a;Lucene与Solr 安装 Solr1、下载解压2、添加环境变量3、启动 Solr Solr 所支持的子命令&#xff1a;Solr 的 Core 和 Collection 介绍Solr 的Web控制台DashBoard&#xff08;仪表盘&#xff09;Logging&#xff08;日志&#xff09…

理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage

理想架构的高回退Doherty功率放大器理论与仿真-Multistage 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器&#xff08;等分经典款&#xff09;的理论与ADS电流源仿真参考&#x…

《云原生安全攻防》-- 云原生安全概述

从本节课程开始&#xff0c;我们将正式踏上云原生安全的学习之旅。在深入探讨云原生安全的相关概念之前&#xff0c;让我们先对云原生有一个全面的认识。 什么是云原生呢? 云原生&#xff08;Cloud Native&#xff09;是一个组合词&#xff0c;我们把它拆分为云和原生两个词来…

TS项目实战一:流淌的字符动画界面

使用ts实现虚拟世界&#xff0c;创建ts项目&#xff0c;并编写ts代码&#xff0c;使用tsc编译后直接加载到html界面&#xff0c;实现类似黑客帝国中的流淌的代码界面的效果。 源码下载地址&#xff1a;点击下载 讲解视频 TS实战项目一&#xff1a;数字流界面项目创建 TS实战项…

LRU缓存(Leetcode146)

例题&#xff1a; 分析&#xff1a; 题目要求函数get和put要达到O(1)的时间复杂度&#xff0c;可以用 hashMap 来实现&#xff0c;因为要满足逐出最久未使用的元素的一个效果&#xff0c;还需要配合一个双向链表来共同实现。链表中的节点为一组key-value。 我们可以用双向链表来…

前端工程化之:webpack1-9(plugin)

一、plugin loader 的功能定位是转换代码&#xff0c;而一些其他的操作难以使用 loader 完成&#xff0c;比如&#xff1a; 当 webpack 生成文件时&#xff0c;顺便多生成一个说明描述文件&#xff1b;当 webpack 编译启动时&#xff0c;控制台输出一句话表示 webpack 启动了&…