直接对三通道的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毫秒。增加的用时不能忽略


相关文章
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2132 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
|
3月前
|
C++
C++ PCL 沿着自定义的平面做横截面(直通滤波)
C++ PCL 沿着自定义的平面做横截面(直通滤波)
44 0
|
5月前
|
算法 数据挖掘 计算机视觉
图像处理之Mean Shift滤波(边缘保留的低通滤波)
图像处理之Mean Shift滤波(边缘保留的低通滤波)
33 0
UE4 Pose与单帧动画烘焙功能
UE4 Pose与单帧动画烘焙功能
109 0
UE4 Pose与单帧动画烘焙功能
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
1595 0
|
存储 测试技术
halcon 区域Region(HObject)的传输
halcon 区域Region(HObject)的传输
|
文字识别 监控 算法
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
155 0
|
文字识别 监控 算法
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行图像显示(Mono)(C#)(将图像数据Buffer转为HObject)
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行图像显示(Mono)(C#)(将图像数据Buffer转为HObject)
129 0
|
算法
【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask)
> 掩膜操作可以提高图像对比度,对比度提高可以增加图像感官度、锐化,让看起来有点模糊的图像更清晰。 > 原理:提取图像的高频分量,再用一个参数放大之后与原图叠加,这样就产生了一个增强了边缘的图像。 > 提取图像的高频分量的做法有两种: > 1.直接使用高通滤波器,得到高频分量。2.通过低通滤波器,再用原图减去低频就得到了高频信息。
531 0
【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask)