python打造光斑处理系统5:查看光强分布

源代码
光斑处理:python处理高斯光束的图像
光斑处理系统:

光斑分布

光斑作为图像而言,其表现能力是有限的,因为相比于其形状,我们有时更关心其强度。而为了表现其强度,则有许多种不同的方案

  1. ‘cross’ 对每行或者每列挑选出峰值位置和行列的均值,作为其代表性的数据
  2. ‘3d’ 直接把强度作为第三个维度,绘制三维的光斑数据
  3. ‘deg’ 用过质心的线段对光斑进行等分,并得到每条线段上光斑的强度分布
  4. ‘click’ 点击两点连线,并显示这条线上的强度分布

其中,click模式与之前图像切割时需要用到相同的交互,故放在一起实现;而deg模式涉及到比较复杂的插值过程,所以下面先实现前两种模式。

峰值和均值

根据上述几种模式,可设置下面三个参数,表示分布模式、起始角度和角度分割数。

    def init_param(self):
        # 前面省略
        # 光斑分布
        self.distriPara = {
            "mode":"cross",
            "stDeg":0,
            "numDeg":4
        }

而光斑分布的整体框架如下

    def img_distri(self):
        flag, distriPara = inputValue(self.distriPara)
        if not flag:
            return
        for key in distriPara:
            if key != None:
                self.distriPara[key] = distriPara[key]
        if distriPara['mode'] == 'cross':
            self.drawCross()
        elif distriPara['mode'] == "3d":
            self.drawPlot3D()
        elif distriPara['mode'] == "deg":
            self.drawPlotDeg()

对于cross模式而言,起始并不需要参数,只需求得水平方向和竖直方向的最大值和均值即可,相应地绘图函数如下

    def drawCross(self):
        datas = {
            "xMax": np.max(self.img, 0),
            "yMax": np.max(self.img, 1),
            "xMean": np.mean(self.img, 0),
            "yMean": np.mean(self.img, 1)
        }
        self.fig.clf()
        for i,key in enumerate(datas,1):
            ax = self.fig.add_subplot(2,2,i)
            ys = datas[key]
            ax.plot(np.arange(len(ys)), ys, label=key)
            ax.legend()
        self.canvas.draw()

结果如下

在这里插入图片描述

三维分布

画出一个光斑的三维分布,要远比想象中更简单,只需一个函数就可以轻松做到

    def drawPlot3D(self):
        m,n = self.img.shape
        xAxis,yAxis = np.indices([n,m])
        self.fig.clf()
        ax = self.fig.add_subplot(111, projection='3d')
        ax.plot_surface(xAxis,yAxis,self.img)
        self.canvas.draw()

其中 m , n m,n m,n是图像尺寸,xAxis, yAxis是坐标轴网格,在清楚现有图像后,新建一个三维坐标轴,并将图像灰度以三维形式展示出来,效果如下。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值