直接对三通道的HObject 阈值分割 结果如何?

简介: 直接对三通道的HObject 阈值分割 结果如何?

对哪些通道进行阈值分隔

猜测一:只对第一个通道进行阈值分割,可能有多个区域。

猜测二,对三个通道分别进行阈值分割,有多个区域。

个人感觉猜测一比较合理。假定猜测二正确,对结果用ReduceDomain ,各通道的结果会受其它通道干扰。

开发及运行环境。操作系统win7 开发工具:VS2022 图像处理库:halcon12CreateImage函数用于 指定宽度和byte数组创建图像

   

HObject CreateImage(byte[] barr,int width)
        {
            IntPtr p = Marshal.AllocHGlobal(barr.Length);
            Marshal.Copy(barr, 0, p, barr.Length);
            HObject img = new HObject();
            HOperatorSet.GenImage1(out img, "byte", width, barr.Length/ width,p);
//有内存泄漏
            return img;
        }
            int wh = 2;
            byte[] barr = new byte[wh * wh];
            HObject imgR = CreateImage(barr, wh);
            barr[0] = 1;
            HObject imgG = CreateImage(barr, wh);
            barr[1] = 1;
            HObject imgB = CreateImage(barr, wh);
            HObject imgRGB;
            HOperatorSet.Compose3(imgR, imgG, imgB, out imgRGB);
            HObject region;
            HOperatorSet.Threshold(imgRGB, out region, 1, 1);
            HTuple tNum;
            HOperatorSet.CountObj(region, out tNum);
            HTuple tArea = WHCSHalCon.Base.Area(region);

           结果:

区域数量1,面积0。

修改组成多通道的语句为如下:

HOperatorSet.Compose3(imgG, imgB, imgR, out imgRGB);

区域数量1,面积1。

修改组成多通道的语句为如下:

HOperatorSet.Compose3( imgB, imgR, imgG, out imgRGB);

区域数量1,面积2。

结论证明猜测一正确。

用时

新问题,直接二值化imgRGB用时会不会大幅增加呢?

int wh = 1024*10;
            byte[] barr = new byte[wh * wh];
            HObject imgR = CreateImage(barr, wh);
            barr[0] = 1;
            HObject imgG = CreateImage(barr, wh);
            barr[1] = 1;
            HObject imgB = CreateImage(barr, wh);
            HObject imgRGB;
            HOperatorSet.Compose3( imgB, imgR, imgG, out imgRGB);
            double dUse1, dUse2, dUse3;
            {
                System.DateTime begin = System.DateTime.Now;
                HObject region;
                HOperatorSet.Threshold(imgRGB, out region, 1, 1);
                HTuple tNum;
                HOperatorSet.CountObj(region, out tNum);
                HTuple tArea = WHCSHalCon.Base.Area(region);
                dUse1 = (System.DateTime.Now - begin).TotalMilliseconds;
            }
            {
                System.DateTime begin = System.DateTime.Now;
                HObject region;
                HOperatorSet.Threshold(imgR, out region, 1, 1);
                HTuple tNum;
                HOperatorSet.CountObj(region, out tNum);
                HTuple tArea = WHCSHalCon.Base.Area(region);
                dUse2 = (System.DateTime.Now - begin).TotalMilliseconds;
            }
            {
                System.DateTime begin = System.DateTime.Now;
                HObject tmp1, tmp2, tmp3;
                HOperatorSet.Decompose3(imgRGB, out tmp1, out tmp2, out tmp3);
                HObject region;
                HOperatorSet.Threshold(tmp1, out region, 1, 1);
                HTuple tNum;
                HOperatorSet.CountObj(region, out tNum);
                HTuple tArea = WHCSHalCon.Base.Area(region);
                dUse3 = (System.DateTime.Now - begin).TotalMilliseconds;
            }
        }

对于100M的大img,dUse1到15毫秒,dUse2大约7.8毫秒,dUse3大约8.2毫秒。增加的用时不能忽略


相关文章
|
Java API Maven
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
我们经常会在yml配置文件中存放一些敏感数据,比如数据库的用户名、密码,第三方应用的秘钥等等。这些信息直接以明文形式展示在文件中,无疑是存在较大的安全隐患的,所以今天这篇文章,我会借助jasypt实现yml文件中敏感信息的加密处理。
4935 1
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
797 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
7月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
773 0
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
350 3
|
机器学习/深度学习 人工智能 算法
ai量子计算
【8月更文挑战第5天】ai量子计算
261 3
|
安全 Linux
【Linux】详解用户态和内核态&&内核中信号被处理的时机&&sigaction信号自定义处理方法
【Linux】详解用户态和内核态&&内核中信号被处理的时机&&sigaction信号自定义处理方法
266 1
|
监控 应用服务中间件 网络安全
购买阿里云服务器后如何将自己的项目部署到服务器并上线?
在阿里云服务器上部署项目涉及准备项目、配置服务器、设置SSH密钥、连接服务器、安装所需软件、部署项目、配置Web服务器(如果需要)、测试项目、监控和维护,最后上线。确保项目完整并测试无误,配置安全组和云盾,使用SSH连接,安装OS、数据库和编程环境。通过Git同步代码,配置Nginx或Apache,测试正常后正式上线。利用阿里云文档和教程辅助操作。
2247 3
|
弹性计算 Shell Linux
|
JavaScript 数据可视化 测试技术
使用 Jest 进行 Vue 单元测试
使用 Jest 进行 Vue 单元测试
409 0