Python和MATLAB(Java)及Arduino和Raspberry Pi(树莓派)点扩展函数导图

news2024/9/20 14:20:32

🎯要点

  1. 反卷积显微镜图像算法
  2. 微珠图像获取显微镜分辨率
  3. 基于像素、小形状、高斯混合等全视野建模
  4. 基于探测器像素经验建模
  5. 荧光成像算法模型
  6. 傅里叶方法计算矢量点扩展函数模型
  7. 天文空间成像重建
  8. 二维高斯拟合天体图像
  9. 伽马射线能量和视场中心偏移角
  10. 标量矢量模型
  11. 盲解卷积和深度估计
  12. 测量绘制光源虹膜孔径和峰值
    在这里插入图片描述

Python泽尼克矩

泽尼克多项式被广泛用作图像矩的基函数。由于泽尼克多项式彼此正交,泽尼克矩可以表示图像的属性,且矩之间没有冗余或信息重叠。尽管泽尼克矩很大程度上取决于感兴趣区域中对象的缩放和平移,但其幅度与对象的旋转角度无关。因此,它们可用于从图像中提取描述对象形状特征的特征。例如,泽尼克矩被用作形状描述符,以对良性和恶性乳腺肿块进行分类或振动盘的表面。泽尼克矩还被用于在单细胞水平上量化骨肉瘤癌细胞系的形状。此外,泽尼克矩已用于早期发现阿尔茨海默病,方法是从阿尔茨海默病、轻度认知障碍和健康人群的 MR 图像中提取判别信息。

泽尼克矩是一种图像描述符,用于表征图像中对象的形状。要描述的形状可以是分割的二值图像,也可以是对象的边界(即形状的“轮廓”或“轮廓”)。在大多数应用中,最好使用分割的二值图像而不仅仅是轮廓,因为分割的二值图像不易受噪声影响。

泽尼克矩数学形态

泽尼克矩使用复泽尼克多项式作为矩基组。二维泽尼克矩 Z n m Z_{n m} Znm,阶数 n n n,重复 m m m,在单位圆内的极坐标 ( r , θ ) (r, θ) (r,θ) 中定义为
Z n m = n + 1 π ∫ 0 1 ∫ 0 2 π R m ( r ) e − j m θ f ( r , θ ) r d r d θ , 0 ≤ ∣ m ∣ ≤ n , n − ∣ m ∣  是偶数  \begin{gathered} Z_{n m}=\frac{n+1}{\pi} \int_0^1 \int_0^{2 \pi} R_m(r) e^{-j m \theta} f(r, \theta) r d r d \theta, 0 \leq|m| \leq n, n-|m| \text { 是偶数 } \end{gathered} Znm=πn+10102πRm(r)ejmθf(r,θ)rdrdθ,0mn,nm 是偶数 
其中 R n m ( r ) R_{n m}(r) Rnm(r) 是泽尼克径向多项式的 n n n 阶,由下式给出
R n m ( r ) = ∑ k = 0 ( n − ∣ m ∣ ) / 2 ( − 1 ) k ( n − k ) ! k ! ⌊ ( n − 2 k + ∣ m ∣ ) / 2 ⌋ ! ⌊ ( n − 2 k − ∣ m ∣ ) / 2 ⌋ ! r n − 2 k \begin{gathered} R_{n m}(r)= \\ \sum_{k=0}^{(n-|m|) / 2}(-1)^k \frac{(n-k)!}{k!\lfloor(n-2 k+|m|) / 2\rfloor!\lfloor(n-2 k-|m|) / 2\rfloor!} r^{n-2 k} \end{gathered} Rnm(r)=k=0(nm)/2(1)kk!⌊(n2k+m)/2⌋!⌊(n2km)/2⌋!(nk)!rn2k
与旋转矩和复矩一样,泽尼克矩的大小在图像旋转变换下是不变的。图像可以使用 M M M 阶矩的集合来重建为
f ( r , θ ) ≈ ∑ n = 0 M ∑ m Z n m R n m ( r ) e j m θ f(r, \theta) \approx \sum_{n=0}^M \sum_m Z_{n m} R_{n m}(r) e^{j m \theta} f(r,θ)n=0MmZnmRnm(r)ejmθ

Python计算泽尼克矩

示例一:

_slow_zernike_poly 函数构造二维泽尼克基函数。在 zernike_reconstruct 函数中,我们将图像投影到 _slow_zernike_poly 返回的基函数上并计算矩。然后我们使用重建公式。

import numpy as np
from math import atan2
from numpy import cos, sin, conjugate, sqrt

def _slow_zernike_poly(Y,X,n,l):
    def _polar(r,theta):
        x = r * cos(theta)
        y = r * sin(theta)
        return 1.*x+1.j*y

    def _factorial(n):
        if n == 0: return 1.
        return n * _factorial(n - 1)
    y,x = Y[0],X[0]
    vxy = np.zeros(Y.size, dtype=complex)
    index = 0
    for x,y in zip(X,Y):
        Vnl = 0.
        for m in range( int( (n-l)//2 ) + 1 ):
            Vnl += (-1.)**m * _factorial(n-m) /  \
                ( _factorial(m) * _factorial((n - 2*m + l) // 2) * _factorial((n - 2*m - l) // 2) ) * \
                ( sqrt(x*x + y*y)**(n - 2*m) * _polar(1.0, l*atan2(y,x)) )
        vxy[index] = Vnl
        index = index + 1

    return vxy

def zernike_reconstruct(img, radius, D, cof):

    idx = np.ones(img.shape)

    cofy,cofx = cof
    cofy = float(cofy)
    cofx = float(cofx)
    radius = float(radius)    

    Y,X = np.where(idx > 0)
    P = img[Y,X].ravel()
    Yn = ( (Y -cofy)/radius).ravel()
    Xn = ( (X -cofx)/radius).ravel()

    k = (np.sqrt(Xn**2 + Yn**2) <= 1.)
    frac_center = np.array(P[k], np.double)
    Yn = Yn[k]
    Xn = Xn[k]
    frac_center = frac_center.ravel()

    npix = float(frac_center.size)

    reconstr = np.zeros(img.size, dtype=complex)
    accum = np.zeros(Yn.size, dtype=complex)

    for n in range(D+1):
        for l in range(n+1):
            if (n-l)%2 == 0:
                vxy = _slow_zernike_poly(Yn, Xn, float(n), float(l))
                a = sum(frac_center * conjugate(vxy)) * (n + 1)/npix
                accum += a * vxy
    reconstr[k] = accum
    return reconstr

if __name__ == '__main__':

    import cv2
    import pylab as pl
    from matplotlib import cm

    D = 12

    img = cv2.imread('fl.bmp', 0)
    rows, cols = img.shape
    radius = cols//2 if rows > cols else rows//2
    reconst = zernike_reconstruct(img, radius, D, (rows/2., cols/2.))
    reconst = reconst.reshape(img.shape)
    pl.figure(1)
    pl.imshow(img, cmap=cm.jet, origin = 'upper')
    pl.figure(2)    
    pl.imshow(reconst.real, cmap=cm.jet, origin = 'upper')

示例二:

我们将学习应用泽尼克矩矩实际识别图像中的对象。我们需要 2 张图像:第一个图像将是我们要检测的对象的参考图像。第二张图像将是一个干扰物图像,其中包含 (1) 我们想要查找和识别的对象,以及 (2) 一堆旨在“迷惑”我们的算法的“干扰物”对象。我们的目标是成功检测第二张图像中的参考图像。

from scipy.spatial import distance as dist
import numpy as np
import cv2
import imutils
  
def describe_shapes(image):
    shapeFeatures = []

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (13, 13), 0)
    thresh = cv2.threshold(blurred, 50, 255, cv2.THRESH_BINARY)[1]

    thresh = cv2.dilate(thresh, None, iterations=4)
    thresh = cv2.erode(thresh, None, iterations=2)

    cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
        cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)

    for c in cnts:
        mask = np.zeros(image.shape[:2], dtype="uint8")
        cv2.drawContours(mask, [c], -1, 255, -1)

        (x, y, w, h) = cv2.boundingRect(c)
        roi = mask[y:y + h, x:x + w]

        features = zerni_moments(roi, cv2.minEnclosingCircle(c)[1], degree=8)
        shapeFeatures.append(features)

    return (cnts, shapeFeatures)

refImage = cv2.imread("pokemon_red.png")
(_, gameFeatures) = describe_shapes(refImage)

shapesImage = cv2.imread("shapes.png")
(cnts, shapeFeatures) = describe_shapes(shapesImage)
 
D = dist.cdist(gameFeatures, shapeFeatures)
i = np.argmin(D)
 
for (j, c) in enumerate(cnts):

    if i != j:
        box = cv2.minAreaRect(c)
        box = np.int0(cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box))
        cv2.drawContours(shapesImage, [box], -1, (0, 0, 255), 2)
  
box = cv2.minAreaRect(cnts[i])
box = np.int0(cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box))
cv2.drawContours(shapesImage, [box], -1, (0, 255, 0), 2)
(x, y, w, h) = cv2.boundingRect(cnts[i])
cv2.putText(shapesImage, "FOUND!", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9,
    (0, 255, 0), 3)
cv2.imshow("Input Image", refImage)
cv2.imshow("Detected Shapes", shapesImage)
cv2.waitKey(0)

要查看实际效果,只需执行以下命令:

$ python detect.py

👉更新:亚图跨际

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

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

相关文章

三、数组————相关概念详解

数组 前言一、数据理论基础二、数组常用操作2.1 初始化数组2.2 访问数组中的元素2.3 插入元素2.4 删除元素 三、数组扩展3.1 遍历数组3.2 数组扩容 总结1、数组的优点2、数组的不足 前言 在数据结构中&#xff0c;数组可以算得上最基本的数据结构。数组可以用于实现栈、队列、…

中资优配:炒股最笨十句口诀?

在出资股票时&#xff0c;出资者假设掌握一些方法技巧等&#xff0c;可以协助出资者更好地在股市进行生意&#xff0c;下面为我们介绍炒股十大口诀。 1、不跳水不买&#xff0c;不冲高不卖&#xff0c;横盘不生意 不要在股价跳水时急速买入&#xff0c;也不要在股价一开始冲高…

薛定谔的空气墙?一文带你了解其背后的技术原理

封面图 悟空来了都得撞墙&#xff1f; 目前&#xff0c;被称作“村里第一个大学生”的国产3A游戏《黑神话&#xff1a;悟空》发售已经有一段时间了&#xff0c;游戏采用虚幻引擎4技术&#xff0c;仿佛将传统与现代的界限模糊&#xff0c;玩家游玩时沉浸感极强。然而&#xff…

C# 窗口页面布局

1.Groupbox 单机鼠标右键&#xff0c;置于底层 2.Label 在右方属性中修改名称 3.ComboBox 点击属性中的集合&#xff0c;可以添加选择项 4.CheckBox 在属性中修改名称 5.RichTextBox 富文本 在属性中修改名称与区域 6.StatusStrip 状态栏 将AutoSize改成false就可以修改…

带你速通C语言——结构体(18)

结构体是 C 语言中用于创建复杂数据类型的关键工具。它们允许将多个变量&#xff08;可能是不同类型的&#xff09;组合成一个单一的实体&#xff0c;这对于组织和处理数据非常有用。这使得结构体成为数据库记录、配置设置、复杂数据交换等应用的理想选择。 1.定义结构体 结构…

NX二次开发——基础

1.打开信息窗口并写入 UC1601是将想显示的内容显示在一个UI消息框中&#xff0c;或者是状态栏&#xff0c;如果内容很多的时候&#xff0c;就不适合使用UC1601 使用信息窗口&#xff0c;相关命令&#xff1a;信息->....... 要实现这个功能具有的逻辑&#xff0c;先是要打…

【Kubernetes部署篇】二进制搭建K8s高可用集群1.26.15版本(超详细,可跟做)

文章目录 一、服务器环境信息及部署规划1、K8S服务器信息及网段规划2、服务器部署架构规划3、组件版本信息4、实验架构图 二、初始化环境操作1、关闭防火墙2、配置本地域名解析3、配置服务器时间保持一致4、禁用swap交换分区(K8S强制要求禁用)5、配置主机之间无密码登录6、修改…

ArkUI-状态管理-@Provide、@Consume、@Observed、@ObjectLink

ArkUI-状态管理 Provide装饰器和Consume装饰器&#xff1a;与后代组件双向同步概述观察变化框架行为Provide支持allowOverride参数 Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化概述限制条件观察变化框架行为 Provide装饰器和Consume装饰器&#xff1a;与后…

【python计算机视觉编程——4.照相机模型与增强现实】

python计算机视觉编程——4.照相机模型与增强现实 4.照相机模型与增强现实4.1 真空照相机模型4.1.1 照相机矩阵4.1.2 三维点的投影4.1.3 照相机矩阵的分解4.1.4 计算照相机中心 4.2 照相机标定4.3 以平面和标记物进行姿态估计sift.pyhomography.py主函数homography.pycamera.py…

开源 AI 智能名片 O2O 商城小程序在营销中的应用

摘要&#xff1a;本文探讨了开源 AI 智能名片 O2O 商城小程序在营销中的应用&#xff0c;重点分析了喜好原则、互惠互利和高度认可三个方面对小程序推广和用户忠诚度提升的重要性。通过融入这些原则&#xff0c;开源 AI 智能名片 O2O 商城小程序能够更好地满足用户需求&#xf…

UnsupportedOperation: not readable 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【操作系统】同步互斥与Golang互斥锁实现

【操作系统】同步互斥问题与Golang互斥锁实现 1 背景1.1 独立线程1.2 合作线程1.3 合作有风险&#xff0c;为什么需要合作1.4 多协程并发执行的风险举例&#xff08;Golang语言&#xff09;1.5 对风险的思考 2 同步互斥2.1 一些概念2.2 解决方案——保护临界区2.3 禁用硬件中断…

【转变之旅】从程序员到AI绘画艺术家,我的月入过万之路

曾经&#xff0c;我的生活平淡如水&#xff0c;作为一名程序员&#xff0c;每天重复着朝九晚五的工作。然而&#xff0c;一场突如其来的裁员&#xff0c;让我陷入了失业的深渊。为了生活&#xff0c;我选择了开滴滴谋生。没想到&#xff0c;这个看似权宜之计的决定&#xff0c;…

计算机网络——ARP篇

最近在学习计算机网络&#xff0c;做一下学习笔记&#xff1a; 抛出疑问&#xff1f;什么是ARP&#xff1f;ARP协议的作用是什么&#xff1f;ARP的工作原理是什么&#xff1f;ARP有哪些类型&#xff1f; 首先&#xff0c;我们要了解ARP的概念&#xff0c;ARP&#xff08;Addre…

python计算机视觉编程——照相机模型与增强现实

一、针孔照相机模型 针孔照相机模型(有时称为射影照相机模型)是计算机视觉中广泛使用的照相机模型。针孔照相机模型简单,并且具有足够的精确度。这个名字来源于一种类似暗箱机的照相机。该照相机从一个小孔采集射到暗箱内部的光线。在针孔照相机模型中,在光线投影到图像平面之…

Windows 11 下使用 MSVC 2022 编译64位Nginx

一、软件准备 1、安装 Visual Studio 2022 包含单个组件&#xff1a; .NET Framework 4.6.1 目标包.NET Framework 4.6.1 SDKWindows 通用 C 运行时Windows 通用 CRT SDKMSVC v142 - VS 2019 C x64/x86 生成工具(v14.26)对 v142 生成工具(14.21)的 C/CLI 支持Clang compile fo…

Linux中MFS分布式文件系统(实战教程)全网最详细

MFS架构图 元数据服务器&#xff08;Master&#xff09;&#xff1a;在整个体系中负责管理文件系统&#xff0c;维护元数据。 元数据日志服务器&#xff08;MetaLogger&#xff09;&#xff1a;备份Master服务器的变化日志文件&#xff0c;文件类型为 changelog_ml.*.mfs。当 …

第六届机器学习、大数据与商务智能国际会议(MLBDBI 2024)

目录 主办单位 大会简介 会议组委会 征稿主题 参会方式 会议日程 重要信息 大会官网&#xff1a;www.mlbdbi.org 会议时间&#xff1a;2024年11月1-3日 会议地点&#xff1a;中国-杭州 收录检索&#xff1a;EI Compendex&#xff0c;Scopus 主办单位 大会简介 由…

SSD300模型总结

1、SSD网络结构 SSD以VGG16作为特征提取特征的基础模型&#xff0c;然后在VGG16的基础上增加了额外的卷积和池化操作来获得更多不同尺度的特征图用来检测不同大小的目标 本文主要是SSD300作为例子进行分析 整体主要分为3个部分 backbone网络&#xff1a;VGG16Extra网络&…

使用Mid360进行FAST_LIO建图,并使用Octomap在线转栅格地图

在之前的教程中&#xff0c;我们已经成功的安装了激光雷达驱动&#xff0c;成功复现了FAST_LIO&#xff0c;并使用OCtomap将点云地图转为栅格地图。 但是之前我们是建图生成了.PCD文件后&#xff0c;读取pcd文件进行离线octomap转栅格地图&#xff0c;这样在实际的场景中并不完…