- 博客(26)
- 收藏
- 关注
原创 SIMD 指令集 简单介绍(1)
对于数据类型有ps(表示float),pd(表示double)si128/si256(表示不关心数据类型),epi8/epi16/epi32/epi64(表示整形,单个整形8,16,32,64位),epu8/epu16/epu32/epu64(表示无符号整形,单个整形8,16,32,64位)。simd变量的命名规则,__mm(datalength)(datatype),有两个下划线+mm,再写数据的长度,再写数据类型,i,d表示int和double,空的表示float。那么数据变量可以怎样进行初始化呢?
2025-05-28 20:30:16
270
原创 相机的内参和外参代表的意义(坐标系转换)
由于相机镜头上的透镜的存在,会使得光线投影到成像平面的过程中会产生畸变,实际的相机成像过程包括几何模型和畸变模型。畸变参数是相机内参的一部分,通过求解相机的畸变参数,可以对图像进行畸变矫正,还原畸变造成的图像变形。相机畸变参数分为两种形式,一种是只有一个参数K表示(表示径向畸变,且光学中心就在图像中心,k>0枕形畸变,k<0表示桶形畸变),另一种由五个参数k1,k2,k3,p1,p2表示(k123表示径向径向畸变,包含了偏心畸变p1,p2,光学中心可能不是图像中心)属于相机的内参还是外参?
2025-04-01 17:44:54
490
1
原创 工业相机之--线扫相机相关知识和线扫成像
对于只有几行像素的传感器,线扫相机的拍照速度是非常快的,1秒可以达到好几万行,这也是线扫相机的优势之一。比如脉冲分辨率太大,达不到要求的像素精度,可以通过倍频将信号一分为“多”,而分频则是恰恰相反,实现信号的"多"合为一。:每拍摄一行便切换一种光源,得到组合图像之后再进行拆分,从而得到多种光源的拍摄效果图,降低成本的同时提高了效率。=运动速度/像素精度。线扫相机拍摄的一行图像:可能是由cmos传感器拍摄的多行图像处理得到的,最终得到一帧图像。:相机1秒可以拍摄的帧数,通过用于描述面阵相机的帧率,即FPS。
2025-01-10 15:32:20
920
原创 频域下的图像处理,滤波算法(halcon)
在图像频域中,反应图像在空间域的灰度变化剧烈程度,灰度变化剧烈的代表高频部分,反之代表低频部分。在halcon中可以通过几个算子实现图像空间域和频域的转化,以下对几个算子进行解释和用法介绍,也可以通过halcon的例程进行频域处理学习。通过在频域处理图像的过程是:先通过傅里叶变换转换到频域,再进行频域滤波处理,处理完之后再转换回空间域。注意可以手动生成滤波图像,对频域图像进行处理,或者直接将频域图像某个区域置0,达到同样的效果。参数6:dc_center(低频在中间部分),dc_edge(低频在四个角)
2025-01-06 18:43:46
941
原创 halcon随笔 分割 and 边缘轮廓相关算子 及原理
将通过图像空间一点的所有直线角度离散化,对应的参数空间的曲线就是离散的点集。霍夫变换,进行直线的检测,也可以进行圆椭圆的检测,原理类似,将图像空间中检测线的问题,转化为:把一个空间中具有相似形状的曲线或者直线映射到另一坐标空间中的一点,再在参数空间中统计累计结果的局部最大值的问题。每一个图像空间的点对应参数空间一条直线,而处于同一条直线的点,对应的参数空间的直线会交于一点。前面阐述的是笛卡尔直角坐标系的情况,而笛卡尔坐标无法应对所有的情况,比如垂直于坐标轴的直线,则无法求得在参数空间中的交点。
2024-08-22 18:46:39
946
1
原创 KDtree:实现多维数据的快速查找
BBF算法(近似最近邻算法是一种牺牲精度和空间和换取时间的方法),BBF设定了最大的回溯次数,当回溯次数达到该次数时,就会停止回溯,并以当前的最近邻点作为结果。在二叉查找树(二叉搜索树)中,对于每一个节点,值小于它的在该节点的左边,值大于它的在该节点的右边。kdtree中是在分割左右子树时,选择其中一个维度进行比较,在该维度上,值小于父节点的作为左子树,大于的作为右子树。判断当前回溯节点的另一边的没有访问过的子树,是否存在更近的节点,判断方法是以目标点为圆心,当前最近距离为半径,
2024-06-07 16:15:56
489
转载 均值 、高斯、双边 算法实现(opencv 、halcon)
此方法实现比较呆,只可以实现 3*3size的滤波,先进行了边缘填充,选择靠近的像素值进行填充,然后循环整个图像,在扩充图像上进行计算,得到每一个位置的滤波像素值。3.针对每一个像素,又循环处理该像素每一个滤波核的位置,分别计算距离和像素值权重(在扩充图进行计算),得到权重,直接计算该位置权重后的值,并进行叠加。在滤波算法中,均值、高斯、双边都是常用的算法,知道他们用途的同时,再了解它们的底层原理,有助于对图像算法的理解和算法的底层优化。以到像素点的距离和像素值的相似性进行权重的分配。
2024-05-23 14:37:15
314
1
转载 k-mean和dbscan 算法 实现及结合halcon的可视化测试效果
是一种基于密度的聚类算法,算法过程会不断地(按照距离)向外扩展簇并加入邻居点,所以可以将高密度的区域聚为一类,也可以识别出异常点。需要设定邻居点的数量阈值,和判断是否是邻居点的半径阈值。③如果邻居点没有分类,也加入该簇,并将它的邻居点加入邻居点列表末尾。聚类算法是指将一组数据,按照某种规则进行分类的过程,具备相似的特征的数据将会被归为一类。①如果该点没有分类,寻找他的邻居点,如果他的邻居点数量小于设定阈值,将其设为噪声点类。遍历所有点,计算到所有簇心的距离,将该点加入距离最近的簇心那一类。
2024-05-22 11:08:34
461
原创 halcon 与分割相关的算子(1)
对图像进行局部阈值分割,适用于灰度变化较多的图像。分割思想:对于每一个像素,将原图和均值图像灰度值进行对比,假设提取亮区,则原图和均值图像的灰度差大于阈值的像素,被认为是亮区被选出来。该算子基于灰度直方图的波峰进行分割,需要进行直方图高斯滤波,sigma表示滤波的标准差,该值越大,越平滑,分割出来的区域越少。基于直方图进行分割,一般来说有几个波峰就分割成几块。可以直接得到独立的几个区域,省略了connection算子。输入辅助计算图像,一般采用原图的均值图像。原图gray-均值图gray<-阈值。
2024-03-27 14:19:45
343
原创 halcon 与滤波相关的算子(1)
一共有level.edge,spot,wave,ripple,undulation,oscillation七种,两两组合,即“ll“le”“lw”“lo”“uo”uw”d等等。相比高斯滤波的权重只考虑了距离因素,双边滤波在这基础上还考虑了像素值的相似度,越相似的像素权重越大,根据与像素的距离确定权重,距离越近的像素具备越高的权重,权重的分布服从正态分布。,数值越大,影响的面积越大,平滑度越大,相当于高斯的标准差阈值。局部的重复的部分称为纹理单元,采用不同的滤波核进行纹理滤波。边缘的平滑度,值越大,越平滑。
2024-03-26 15:46:13
2357
原创 halcon 与区域相关的算子(2)
参数1:输入区域参数2:输出区域参数3:结构元素的大小作用:将区域进行膨胀操作。halcon除了膨胀算子,当然也要腐蚀,闭运算,开运算等算子。开运算=先腐蚀后膨胀,正好和‘开’的字面意思相反,这样会好记一点。参数1:输入区域1参数2:输入区域2参数3:输出合并后的区域作用:将两个区域进行合并。参数1:输入区域参数2:输出区域参数3:划分的小矩形的宽参数4:划分的小矩形的高作用:将一个区域划分为几个大小相同的矩形。
2024-03-25 18:11:59
692
原创 c#和halcon实现的任意size的高斯核权重的简单计算方法
对于权重的计算,如果是对于小size的卷积核,那么计算比较简单,那么对于大尺寸的卷积核,则计算较为复杂,提出一种简单的计算方式,建立了数组和卷积核坐标的转换关系,实现数组循环计算。如下图所示为数组坐标和卷积核坐标的位置关系。高斯滤波是一种服从正态分布的滤波器,邻域的权重大小与距离相关,有一个阈值。直接上程序,程序采用c#,并使用了halcon辅助运算。值越大表示平滑度越高,滤波器的权重分布峰图就越矮。
2024-03-19 15:19:57
305
原创 git一些常用的功能,命令,及使用细节
git相当于一个虚拟版本库,有时候我们不想讲某个文件加入其中,即不想对该文件进行追踪和迭代管理,可以设置在忽略文件中,比如一些运行时的缓存文件,编译器生成的一些文件都可以进行忽略。可以先将远程分支克隆到本地,进入本地分支,以该分支为基础建立一个新分支,然后切换到这个分支,将这个分支推送到远程,再建立远程和本地的关联,从而完成新建了一个远程分支。git的合并一般存在很多种原则,也有很多帖子进行了详细的描述,但是写的比较生涩难懂,不太适用入门的,所以自己进行了测试,总结了几点规则进行分享。
2024-03-19 14:29:08
300
1
原创 halcon与区域相关的算子(1)
5.overlaps_rel,根据regions和pattern的重叠面积进行筛选,具体是由 重叠面积和当前region面积的比值进行选择,由min-max控制,取值在0-100之间。将小于该阈值的分水岭合并,如果分水岭的最小灰度为w,两侧区域的最小灰度为wr,wl,如果max(w-wr,w-wr)小于阈值,那么合并两个区域。采用一个卷积核在图像上移动,如果和邻域区域的卷积核中心的灰度差小于设置值,合并这两个卷积核区域,得到几块区域。阈值,如果相邻模版中心的灰度值差小于该值,则合并为一个区域。
2024-03-14 18:45:42
2091
1
原创 看了很多帖子,总结的视觉硬件知识和选型(简练版本),持续更新
光源除了不同的形状和角度,还有不同的颜色,也对打光效果有一定的影响,比如颜色吸收同颜色光等等,还要考虑,不同的高度,角度反射折射等。:工作距离由设备所允许的空间决定,根据所需要的视野大小,确定需要多大的倍率,根据需要的检测精度确定像素比,确定分辨率。,指保持图像清晰的情况下,镜头可以容许的工作距离变动的最大范围,一般分为前景深和后景深,比如+-2mm,表示在工作距离位置前后移动2mm,视野依然清晰。,指的是传感器尺寸和视野的比,小于1表示成放大的像,由倍率可以计算出视野大小,从而计算出图像的像素精度。
2023-11-23 19:03:00
398
原创 代码管理之git
17.git chenout <分支名> 切换到分支,工作区更新为该分支。16.git branch <分支名> 创建分支,不切换当前分支。18.git merge <分支名> 合并一个分支到当前分支。12.git log --graph 查看分支合并情况。19.git branch -d <分支名> 删除分支。3.git --config 查看当前git配置信息。1.git --version 检查git版本。2.git --help 查看git相关命令。14.git branch 查看本地分支。
2023-11-15 16:09:55
84
1
原创 canny算子精辟总结,通俗易懂
写一个canny算子,网上有很多canny算子的博客,但是有些地方描述的没有很清楚或者说比较讲的比较难懂,本文主要对某些细节进行更通俗的解释,由于时间有限,没有长篇大论的进行详细的描述,适合对canny算子已经有一定了解的同学。经过步骤三之后,得到了一个新的梯度幅值图,选择最高的梯度幅值,乘于0.3和0.1分别作为高低阈值,低于低阈值的判断不是边缘,高于高阈值的判断为边缘,处于中间的如果它八邻域内有真正的边缘,将其判断为边缘。1.取梯度幅值的局部最大值作为真正的边缘,用于细化边缘。
2023-09-07 16:26:30
432
原创 halcon 旋转平移矩阵,阈值分割,点线投影
当对点或者点集进行变换时,如果xy与x2y2相同,那么表示绕该点旋转,如果不同,先对点进行一个类似xy到x2y2的平移,再绕x2y2旋转一个角度,(phi为逆,phi2为顺时针,旋转角度即为两者相减).分割结果为 比如light,对一个像素,原图 y(i),阈值图t(i),结果就是满足 y(i)>=t(i)+offset.(点,r,c),(线,r1,c1,r2,c2),输出:(结果点,resR,resC)原图,阈值图,结果区域(输出),偏差,黑或白。生成一个旋转平移矩阵。图像,分割结果,阈值。
2023-09-04 19:20:07
424
1
原创 Halcon超方便的算子,halcon直线相关算子
intersection_lines(,,,,,,r,c,isoverlaping),只需知道直线上的两点坐标。通过下面这个算子,可以直接获得过两点直线的角度,角度在-90到90之间。通过这个算子可以直接求得两条直线的交点,而不需建立直线方程,再求交点。
2023-08-12 17:15:57
1454
1
原创 halcon卡尺基线定位:选择最长边缘轮廓
通过以上步骤即可实现提取最长边缘作为卡尺的基线。*计算这些边缘的长度,并存储下来。*先进行canny边缘检测。
2023-08-05 15:58:44
755
1
原创 机器视觉Halcon(1) vector_angle_to_rigid和affine_trans_point_2d算子,使用注意事项
halcon算子总结
2023-08-05 15:46:30
1642
2
原创 calcopticalFlowFarnback 输出的数值具体意义,运动方向
opencv calcopticalFlowFarnback 的输出flow,所代表的具体意义和每个数值的意义
2022-12-23 17:46:33
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人