测试 halcon measure_projection 算子

期望结果完全相同,但是下面的测试结果和halcon的差值如下:

[0.132838, 0.231991, 0.265157, 0.296903, 0.0998573, 0.165907, 0.230686, 0.130266, 0.0977104, 0.197109, 0.198173, 0.197086, 0.190943, 0.177665, 0.163521, 0.146541, 0.161362, 0.166666, 0.22818, 0.186114, 0.196333, 0.255945, 0.14496, 0.205199, 0.262202, 0.201859, 0.173616, 0.173016, 0.173485, 0.173227, 0.171494, 0.257541, 0.171186, 0.141769, 0.0852231, 0.257203, 0.198859, 0.170551, 0.25673, 0.171491, 0.170175, 0.169464, 0.198114, 0.169922, 0.169473, 0.1695, 0.168997, 0.139408, 0.195358, 0.193962, 0.221091, 0.19246, 0.246518, 0.138458, 0.194492, 0.193142, 0.217299, 0.188277, 0.16121, 0.106746, 0.106695, 0.104717, 0.154996, 0.17956, 0.199884, 0.174948, 0.174217, 0.125464, 0.234857, 0.197361, 0.239242, 0.217724, 0.220922, 0.160648, 0.19362, 0.1959, 0.196964, 0.197266, 0.229685, 0.193291, 0.191924, 0.191487, 0.288308, 0.191503, 0.223271, 0.285233, 0.0954785, 0.157538, 0.187701, 0.284095, 0.190475, 0.18948, 0.188329, 0.187838, 0.186164, 0.217482, 0.277055, 0.215032, 0.15109, 0.27215, 0.211512, 0.208731, 0.286509, 0.262083, 0.31329, 0.315317, 0.358043, 0.396789, 0.403176, 0.397609, 0.39305, 0.392336, 0.19589, 0.260681, 0.459158, 0.330526, 0.19935, 0.587357, 0.518498, 0.44198, 0.24967]

结果并不小,不知道问题出在哪里?

get_grayval_interpolated 和自己实现的双线性差值的结果是完全相同的

dev_close_window()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_window (WindowHandle)
read_image (Image, 'fabrik')
get_image_size (Image, Width, Height)
CenterRow:=Height/2-50
CenterCol:=Width/2
degPhi:=45
Phi:=rad(degPhi)
Length1:=60
Length1:=int(floor(Length1))
Length2:=1
gen_measure_rectangle2 (CenterRow, CenterCol, -Phi, Length1, Length2, Width, Height, 'bilinear', MeasureHandle)
measure_projection (Image, MeasureHandle, GrayValues)
disp_rectangle2(WindowHandle,CenterRow, CenterCol, -Phi, Length1, Length2)

RowAry:=[]
ColAry:=[]
RowAry[Length1]:=CenterRow
ColAry[Length1]:=CenterCol

RowOffsetAry[Length2]:=0
ColOffsetAry[Length2]:=0
clockWise:=true
if(clockWise)
  Phi2:=rad(degPhi-90)  
else
   Phi2:=rad(degPhi+90)    
endif
RowOffsetStep:=sin(Phi2)
ColOffsetStep:=cos(Phi2)
for Index := 1 to Length2 by 1
    RowOffsetAry[Length2+Index]:=RowOffsetStep*Index
    ColOffsetAry[Length2+Index]:=ColOffsetStep*Index
    RowOffsetAry[Length2-Index]:=-RowOffsetAry[Length2+Index]
    ColOffsetAry[Length2-Index]:=-ColOffsetAry[Length2+Index]
endfor
gen_image_const (Image1, 'real', Length1*2+1, Length2*2+1)
get_image_size (Image1, Width1, Height1)
RowOffsetStep:=sin(Phi)
ColOffsetStep:=cos(Phi)
for Index := 1 to Length1 by 1
    RowAry[Length1+Index]:=CenterRow+Index*RowOffsetStep
    ColAry[Length1+Index]:=CenterCol+Index*ColOffsetStep
    RowAry[Length1-Index]:=CenterRow-Index*RowOffsetStep
    ColAry[Length1-Index]:=CenterCol-Index*ColOffsetStep
endfor
GrayValues2:=[]
copy_image(Image, DupImage)

for Index := 0 to Width1-1 by 1
   
    get_grayval_interpolated (Image, RowAry[Index], ColAry[Index], 'bilinear', Grayval)
    
    left:= int(floor(ColAry[Index]))
    right:=left+1
    top:= int(floor(RowAry[Index]))
    bottom:=top+1
    a:=ColAry[Index]-left
    b:=RowAry[Index]-top
    get_grayval(Image,top,left,topLeftGrayVal)
    get_grayval(Image,top,right,topRightGrayVal)
    get_grayval(Image,bottom,left,bottomLeftGrayVal)
    get_grayval(Image,bottom,right,bottomRightGrayVal)
    Grayval:=(1 - a)*(1 - b)*topLeftGrayVal+ a*(1 - b)*topRightGrayVal +(1 - a)*b*bottomLeftGrayVal + a*b*bottomRightGrayVal
    
    
    set_grayval (Image1, Length2, Index, Grayval)
    set_grayval(DupImage,int(RowAry[Index]),int(ColAry[Index]),0)
    AVGGrayVal:=Grayval
    for Index2 := 1 to Length2 by 1
        Row:=RowAry[Index]+RowOffsetAry[Length2+Index2]
        Col:=ColAry[Index]+ColOffsetAry[Length2+Index2]
        
        get_grayval_interpolated (Image, Row, Col, 'bilinear', Grayval)
        
        
        left:= int(floor(Col))
        right:=left+1
        top:= int(floor(Row))
        bottom:=top+1
        a:=Col-left
        b:=Row-top
        get_grayval(Image,top,left,topLeftGrayVal)
        get_grayval(Image,top,right,topRightGrayVal)
        get_grayval(Image,bottom,left,bottomLeftGrayVal)
        get_grayval(Image,bottom,right,bottomRightGrayVal)
        Grayval:=(1 - a)*(1 - b)*topLeftGrayVal+ a*(1 - b)*topRightGrayVal +(1 - a)*b*bottomLeftGrayVal + a*b*bottomRightGrayVal
        
        
        
        set_grayval (Image1, Length2+Index2, Index, Grayval)
        set_grayval(DupImage,int(Row),int(Col),0)
        AVGGrayVal:=AVGGrayVal+Grayval
        Row:=RowAry[Index]+RowOffsetAry[Length2-Index2]
        Col:=ColAry[Index]+ColOffsetAry[Length2-Index2]
        get_grayval_interpolated (Image, Row, Col, 'bilinear', Grayval)
        
        
        
        left:= int(floor(Col))
        right:=left+1
        top:= int(floor(Row))
        bottom:=top+1
        a:=Col-left
        b:=Row-top
        get_grayval(Image,top,left,topLeftGrayVal)
        get_grayval(Image,top,right,topRightGrayVal)
        get_grayval(Image,bottom,left,bottomLeftGrayVal)
        get_grayval(Image,bottom,right,bottomRightGrayVal)
        Grayval:=(1 - a)*(1 - b)*topLeftGrayVal+ a*(1 - b)*topRightGrayVal +(1 - a)*b*bottomLeftGrayVal + a*b*bottomRightGrayVal
        
        
        
        
        set_grayval (Image1, Length2-Index2, Index, Grayval)
        set_grayval(DupImage,int(Row),int(Col),0)
        AVGGrayVal:=AVGGrayVal+Grayval
    endfor
    AVGGrayVal:=AVGGrayVal/Height1
    GrayValues2[Index]:=AVGGrayVal
endfor
for Index := 0 to |GrayValues2|-1  by 1
    GrayValuesDidff[Index]:=GrayValues2[Index]-GrayValues[Index]
endfor

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

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

相关文章

NG32031单片机串口初始化

目录 1. 串口基础 2. 串口配置步骤 3. N32G031串口初始化示例 3.1开启时钟 3.2 配置GPIO 3.3 配置USART 3.4 使能中断(如果需要) 3.5. 示例代码 4. 调试和验证 5. 注意事项 6. 额外功能 NG32G031单片机的串口(UART)通常…

Python政府短期或长期债务李嘉图等价模型状态矩阵

🎯要点 🎯居民消费,财政用途:🖊贴现未来单期公用事业 | 🖊无风险单期贷款毛利率 | 🎯完全和不完全市场中居民消费:🖊计算完全市场、不完全市场中消费和债务发展趋势 | &…

理解Python的元类

1.type()函数 type 函数是一个内置函数,用来获取一个对象的类型。它可以接受一个参数,返回这个参数的数据类型。type也可以用来创建类,type就是元类 x333 list["ab"] tuple (1, "a", True, 3.14) dict {name: Alice,…

初步认识Mysql数据库

MySQL数据库是一个广泛使用的关系型数据库管理系统(RDBMS),以下是对其的初步认识: 1. 定义与背景 定义:MySQL是一个开源的关系型数据库管理系统,用于存储和管理大量的数据。背景:MySQL由瑞典的…

这4款国产软件,因为太良心好用,甚至被误认为是外国人开发的

说起国产软件,大家总是容易给它们打上“流氓、要钱、广告满天飞”的标签,其实,有些小众的软件超级好用,功能强大又不耍流氓,真心不该被一棍子打死。 1、sunlight studio Sunlight Studio是一个开源、免费、无广告的硬…

从云端到终端:青犀视频汇聚/融合平台的视频接入方式与场景应用

一、青犀视频汇聚/融合平台 由TSINGSEE青犀视频研发的EasyCVR智能融合/视频汇聚平台基于“云-边-端”一体化架构,支持视频汇聚、融合管理,兼容多协议(GA/T1400/GB28181/Onvif/RTSP/RTMP/海康SDK/Ehome/大华SDK/宇视SDK等)、多类型…

你的职业规划就是面向贫穷的规划

如果你觉得作者的文章还有点用,请记得点赞 + 关注 说一个扎心的事实,就是我们绝大多数人的职业规划基本上都是错误的,都是面向贫穷的规划。 因为绝大多数人的职业规划都是打工人的职业规划,这种规划除了很少部分人最终能成为企业高管,实现层级跃迁外,绝大多数人在大多数…

单向环形链表的创建与判断链表是否有环

单向环形链表的创建与单向链表的不同在于,最后一个节点的next需要指向头结点; 判断链表是否带环,只需要使用两个指针,一个步长为1,一个步长为2,环状链表这两个指针总会相遇。 如下示例代码: l…

解决 SQLyog 连接 MySQL 8 连不上和 SQLyog Trial 试用到期的问题

今天发现 SQLyog 突然连不上 MySQL 了,跟之前不一样的地方就是我升级了 MySQL,升级到了 MySQL 8。 原来是因为 MySQL 8 引入了新的密码验证机制。在 MySQL 8 中默认的密码验证插件从 mysql_native_password 更换为 caching_sha2_password。我的 SQLYog …

Java17 --- RabbitMQ之常规使用

目录 一、实现消息可靠性投递 1.1、消息生产者端确认机制 1.2、备份交换机 1.3、消费端确认机制 二、消费端限流设置 三、消息超时设置 3.1、从队列设置全局超时时间 3.2、设置消息本身超时时间 四、死信 4.1、消费端拒绝接收消息 4.1.1、创建死信交换机与队列 …

LangChain入门学习笔记(一)——Hello World

什么是LangChain LangChain是一个开源(github repo)的大语言模型应用开发框架,提供了一整套的工具、方法和接口去帮助程序员构建基于大语言模型的端到端应用。LangChain是长链(long chain)的意思,它的一个…

Linux驱动开发笔记(八)输入子系统

文章目录 前言一、输入子系统1. 子系统的引入2. 组成部分3. 事件处理流程4. 相关数据结构 二、程序编写1. 相关API函数1.1 input_allocate_device ( )1.2 input_free_device ( )1.3 input_register_device ( )1.4 input_unregister_device ( )1.5 input_event ( )1.6 input_rep…

Prometheus写入influxDB:中间件remote_storage_adapter

Prometheus写入influxDB:中间件remote_storage_adapter prometheus默认采用的是本地磁盘做数据存储,本地存储的优势就是运维简单但是缺点就是无法海量的metrics持久化和数据存在丢失的风险,数据写入可能造成wal文件损坏导致采集数据无法再写入的问题。 …

【嵌入式DIY实例】-Nokia 5110显示DS18B20传感器数据

Nokia 5110显示DS18B20传感器数据 文章目录 Nokia 5110显示DS18B20传感器数据1、硬件准备2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板和 DS18B20 数字温度传感器实现简单的温度测量站。 NodeMCU 微控制器 (ESP8266EX) 从 DS18B20 传感器读取温度值,并将其打印在诺基亚 …

LeetCode 2786.访问数组中的位置使分数最大:奇偶分开记录(逻辑还算清晰的题解)

【LetMeFly】2786.访问数组中的位置使分数最大:奇偶分开记录(逻辑还算清晰的题解) 力扣题目链接:https://leetcode.cn/problems/visit-array-positions-to-maximize-score/ 给你一个下标从 0 开始的整数数组 nums 和一个正整数 …

如何使⽤C语⾔填充封闭图形?

一、问题 如要对封闭图形(如两个区域的交集)进⾏填充,那么怎么实现呢? 二、解答 填充就是⽤指定的颜⾊和图案填满⼀个封闭图形。 TC 提供了⼀个可对任意封闭图形填充的函数,即 floodfill( ) 。其调⽤格式如下&#xf…

Nginx部署Vue项目css文件能加载但是不生效

目录 问题描述问题解决 问题描述 Nginx部署打包后的Vue项目css文件能加载但是不生效, 问题解决 查看响应标头,发现不对劲, Content-Type: text/plain正确的应该是 Content-Type: text/css根本原因是nginx没有告诉浏览器正确的文件类型 所…

Kubernetes面试整理-Kubernetes 如何工作?

1. 部署应用: ● 开发者或管理员定义一组期望的状态(通常通过 YAML 文件),描述了应用包括的 pods、容器镜像、网络设置和存储要求。 ● 这些定义文件会提交给 API 服务器,存储在 etcd 中。 2. 调度: ● 当创建 pod 请求提交给 Kubernetes 时,调度器会选择一个节点来部署…

Postman接口测试/接口自动化实战教程

一、API 自动化测试 Postman 最基本的功能用来重放请求,并且配合良好的 response 格式化工具。 高级点的用法可以使用 Postman 生成各个语言的脚本,还可以抓包,认证,传输文件。 仅仅做到这些还不能够满足一个系统的开发&#x…

springboot学习小结

背景 业务上需要开发,组里一位前辈给我指路 spring基础 什么是spring spring提供一个容器称为spring应用上下文,容器里可以创建和管理组件,组件会在容器里装配好,组件也可以叫bean。 装配不由组件创建他依赖的组件&#xff0…