2019-10-20 10:31:47
勇哥接触Matlab日子不短了。以前在工作中主要用它来绘制函数图像。由于使用它在C#中绘制图像普遍反映比较慢,因此几乎没有什么项目中使用了它。现在突然想到它是因为想学习一下矩阵与图形学的基础知识,辅助学习一下这些方面是该软件擅长的,因此在此留下学习的记号。Matlab最大的优点就是简单,容易操作。首先介绍正玄函数绘制过程。 确定函数的定义域,这里以(-π,π)为例。 程序如下:x=[-pi:0...
2019-10-18 20:35:04
话题见下文:经典算法——绘制空心圆勇哥这里写下其实践的内容。首先,画圆公式为: 原点为圆心,半径为r(r>0)的圆的标准方程为x2+y2=r2下面的代码中ox,oy是原点的位置, radius是圆的r。g是画布句柄。private void drawCircle2(Graphics g, int radius, int ox, int oy)
{...
2019-10-15 11:04:01
在TurboC中,可以使用各种现成的函数绘制各种各样有趣漂亮的图形,而在VC中则比较难以实现。但是,我们可以用“*”当作点,连点成线,用来绘制各种线条或者图形。这就得看算法了,所谓算法就是解决问题的方法。这里呢,我们就一起来看看,在Visual C++6.0中,如何利用“*”绘制一个空心圆。大家有什么好的建议或者意见,都可以在我的评论栏里给我留言,希望我们相互学习,共同进步。第一步:建立坐标系根据...
2019-10-15 09:50:08
三点确定一个圆的计算方法最近在写的一个软件需要根据三个坐标点来计算一个圆。因此花了点时间推导了相关的公式。这个推导不算太难,放在这里主要是做个备忘。我们设一个圆的圆心坐标为 ,半径为 r 。那么这个圆的方程可以写为:在这个圆上随便取三个点,设这三个点的坐标分别是 那么有:公式(1)(2)相减,(1)(3)相减之后经过化简可以得到:有唯一解的条件是系数行列式不为 0 :简单变变型也就是:这样写几何含...
2019-10-15 09:46:11
1. 三点绘制圆 已知三点为(x1,y1)、(x2,y2),(x3,y3),求三点形成的圆的坐标,可以设求得的圆的原点为(X,Y),半径为R,这样可以得到方程组: (x1-X)²-(y1-Y)²=R² (1)式 (x2-X)²-(y2-Y)²=R² (2)式 (x3-X)²-(y3-Y)²=R² (3)式由上述方程组可以得到: 2(x1-x2)X +2(y1-y2...
2019-10-14 21:41:52
运行程序前先创建ROI以创建模板,然后顺时针或者逆时针绘制三根直线,以确定找线的方向与距离。由于找线的时候是模板跟随的,最后得到下面的结果:代码如下:其中draw_rake,dev_display_shape_matching_result,rake,pts_to_best_line为外部算子。有需要的朋友可以找勇哥索取。dev_close_window ( )
read_image (Imag...
2019-10-13 19:11:54
halcon17的找线功能其实是对之前halcon10版本找线方法的封装。勇哥下面这几篇文章介绍了halcon10版本的找线方法,你会发现,halcon17的找线算子的参数其实跟这篇文章介绍的差不多的。Halcon学习(27-2)halcon测量技术:找线带ROI跟随的找边测试代码(halcon代码演示)经过封装后的找线算子,还是非常好用的,你只需要给定找线的起始与终止点即可。演示代码如下:rea...
2019-10-06 11:32:37
(一)绘制数组的图形如下图,我测量电池的左右宽度,其结果生成在数组DistanceAry中。在之前的halcon版本中,双击数组弹出一个列表检查数据。如果想查看数据的曲线图,你得把数据导出到excel中。现在可以像下面这样了。不用把数据导入到excel中绘图了。(二)待续……--------------------- 作者:hackpig来源:www.skcircle.com版权声明:本文为博主原...
2019-09-10 17:18:05
首先,我们要了解一下常规的手眼标定流程是怎么样的。(一)如果吸嘴中心就是法兰盘的中心则是下面这样的:按九宫格走九个点,取得九组吸嘴的像素坐标与法兰盘的机械坐标 (图1)进行标定(二)如果吸嘴位置不在法兰盘中心则标定流程要复杂些:人工创建工具坐标Tool 1,把工具坐标中心创建到标定片的Mark点上去按九宫格走九个点,取得九组特征点的像素坐标与对应的机械坐标进行标...
2019-09-01 20:25:12
勇哥在把netMarketing类库由halcon10改为halcon17时,遇到载入halcon窗口时报下面的错误:无法在 DLL“halcon”中找到名为“HLIIsUTF8Encoding”的入口点。经检查,是因为程序的bin目录下缺少halcon17的halcon.dll这个文件。也就是说,只把halcondotnet.dll文件换成halcon17的是没有用的。其实,最保险的就是把hal...
2019-08-23 20:24:50
勇哥手头上的C#工程要由基于halcon10视觉的改为halcon17版的视觉。更换的原因是因为halcon17比较新比较潮,不能落伍…… 其实是因为halcon10的窗体控件以及内存泄露方面有些问题。勇哥在这里记录一下以备忘。首先把halcon17的下面两个目录下的dll全部复制到你程序的bin目录下面。然后在你的程序中,凡是用到halcondotnet的引用,全部删除,引用新版的。版本号如划线...
2019-07-25 13:24:58
1. 仿射变换类型 仿射变换有:平移、旋转、缩放、斜切(就是将斜体字导正)。2. 求稳定的特征点 要进行仿射变换,必须先获取变换矩阵。要获取变换矩阵,必须先获取特征点坐标、角度等信息,几何匹配和bolb是获取特征点的高效方法,除此之外还有其它方法,只要能稳定的求出特征点即可。 3.仿射变换流程 (1.)获取特征点坐标、角度 (2.)计算仿射变换矩阵 (3.)对图像、区域...
2019-07-25 11:08:17
以前在使用算子OpenFramegrabbe连接相机时,一般是这样的:open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'default', 0, -1, Acq...
2019-07-24 22:02:43
形态模板的定义与查找是工业视觉里最基本的常用操作。下面勇哥提供一个例子。下图是定义形态模板,并且显示模板轮廓。换一张不同姿式的图片,查找模板,并显示模板轮廓、ROI、中心点。dev_set_draw ('margin')
dev_set_color('green')
dev_close_window()
dev_open_window(0, 0, 512, 3...
2019-07-23 22:38:05
angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 函数作用:计算线与水平轴间的夹角逆时针旋转向量到水平轴的角度即为结果值,该结果取决于两个点的顺序,用弧度表示,范围为[-pi, pi]上一段代码:ange_lx(Row_1, Col_1, Row_2, Col_2, Angle)
****************************...
2019-07-23 19:54:12
手眼标定涉及的坐标系有:工件坐标系工具坐标系相机坐标系(相机坐标系里又有图像坐标系和像素坐标系,这其实就是前面讲的单目标定的内容)基坐标系手眼标定一般有两种形式:1、相机固定(eye-to-hand)我们需要的最终结果,即得到base 与 cam 的空间位置关系,即一个4*4的变换矩阵。这个可以通过移动tool带着标定板移动到相机下方不同位置角度,由相机多次拍摄标定板来计算得到。有些相机虽然固定在...
2019-07-18 21:42:31
通过本例程巩固了对剖面灰度值的描述,并进行测量,算子使用同“halcon例程学习笔记(2)”。此例程进一步学习了halcon中的基本函数的使用方法:subset 求取一个数组的子集find 查找相应条件的值的位置索引数组的错位减法的使用。其它基本图像处理基本算子,可以查阅halcon使用手册,详细了解。例程代码如下:dev_update_off ()
dev_close_window (...
2019-07-18 21:38:36
本例程来做halcon10.0版本中的一维函数中check_smd_tilt.hdev例程,通过此例程可以学习到如何使用halcon中算子measure_projection通过投影图像上垂直于剖面线方向的灰度值来提取1D灰度剖面,如下是对此算子的详细理解:更多关于测量的算子理解,可以参考北京大恒宣讲的PPT halcon测量技术。下面例程是检测SMDS是否与近水平或者相对相机是否倾斜。分析图像...
2019-07-18 21:29:33
其为分析液体中的成分,得出区域中的平均灰度和面积;在液体二值图像中有几个亮斑,需要提前去除;液体成分中灰度变化不明显,直接采用全局阈值处理效果不佳;读取鼠标按键数值,并选择区域。threshold (Image, Large, 110, 255)
* Dilate regions with a circular structuring element
dilation_circle (Larg...
2019-07-17 17:16:17
这个例程的目的是使用算子来找出结构不规则的原则,其中涉及到一些算子:crop_rectangle1:从图像中截取矩形图像
gauss_filter:高斯滤波
watersheds:图像分水岭算法
smallest_rectangle1:平行于坐标轴的最小外接矩形Part Ⅰ 初始化程序dev_update_off ()
dev_close_window ()
dev_set_draw...
2019-07-17 17:11:30
1、一维条码一维条码:由一组规则排列的条、空以及对应的字符组成的标记,“条”指对光线反射率较低的部分,“空”指对光线反射率较高的部分,这些条和空组成的数据表达一定的信息,并能够用特定的设备识读,转换成与计算机兼容的二进制和十进制信息。 一维条码的码制: EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。 EAN 码:是国际通用的符号体系,是...
2019-07-17 16:55:23
要检查电芯表面是否有条码,可以知道电芯是否放反面了,起到视觉防呆的作用。勇哥能想到的思路是:一维,二维码识别,能识别则为有码面。框选区域,算子intensity计算区域灰度值的平均值或者方差,以此来判断是否为有码面。下面的程序两种方法都用到,把代码做个记录,供大家参考。其结果可以看到,完美的情况下,两种方法都可以。但其实还是有问题的,比如如果电池表面贴了膜,那么因为反光的原因,两种方法都有可能会误...
2019-06-28 21:31:19
勇哥目前在一款尺寸测量设备中,应用到了一些算法,在这里做记录。下面是算法用到的一些函数。/// <summary>
/// 新建一条拟合直线
/// </summary>
/// <param name="linePt"></param>
/// <pa...
2019-05-07 10:52:54
此方法旨在满足部分区域拍照后,想输出成一张图,对重叠区域要求不是很高。区别于图像拼接方法,请注意。勇哥2019/5注:下面的办法只适合拼合灰度图片,如果你想拼合彩色图片则要用另外的办法。在这里,我在一个文件夹中保存了9张图,遍历读取,从而合成显示。图片合成方法public void ImageJigsaw(string path = "C:/Users/team/Desktop/4/&q...
2019-05-02 22:01:38
在评估图像处理算法时,通常会考虑是否具有亚像素精度。那么什么是亚像素呢?具有亚像素精度的算法会有什么优点呢?亚像素可以解决什么问题呢?亚像素概念的引出:图像处理过程中,提高检测方法的精度一般有两种方式。一种是提高图像系统的光学放大倍数和CCD相机的分辨率能力;另一种是引入亚像素细分技术来弥补硬件的不足以提高图像系统的分辨率。如使用亚像素细分技术将精度提到到0.01像素,就相当于提高了100倍的图像...
2019-04-21 22:23:27
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。目前,Unity正在迅速发展,前景可期,因此值得我们学习。下面先来学习一下Unity5.3.4的安装和破解。1、首先,在Unity官网上下载Unity,在这里我已经把我的安装包上传到网盘了,如果嫌麻烦的话,...
2019-04-21 18:03:01
使用MATLAB做计算,必然少不了进行矩阵和数组运算,对矩阵和数组进行转置、相加、相减、相乘、相除等运算,下面使用MATLAB一一给大家介绍这些运算的方法、步骤,希望能够帮助大家。第一步:首先我们需要在matlab命令窗口中创建一个矩阵或数组,如我们可以在命令行窗口输入代码:A=[2 4 6 8;10 12 14 16;18 20 22 24;26 28 30 32]即可创建一个4行4列的矩阵或数...
2019-04-21 11:37:16
1. 简介计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。2. 绕原点二维旋转首先要明确旋转在二维中是绕着某一个点进行旋转,三维中是绕着某一个轴进行旋转。二维旋转中最简单的场景是绕着坐标原点进行...
2019-04-21 11:28:33
1 围绕原点的旋转如下图, 在2维坐标上,有一点p(x, y) , 直线opの长度为r, 直线op和x轴的正向的夹角为a。 直线op围绕原点做逆时针方向b度的旋转,到达p’ (s,t) s = r cos(a + b) = r cos(a)cos(b) – r sin(a)sin(b) (1.1)t = r sin(a + b) = r sin(a)cos(b) + r cos(a) sin(...
2019-04-21 11:00:26
紧接上一篇:几何向量:基本概念上一篇讲了向量的加减分配等计算,那么紧接着就是应该来讲乘除了吧,我们知道普通数值都有加减乘除开方等等计算,比如:10x10 = 100 10÷10 = 1那么向量AxB = ? A÷B = ? 我们知道向量其实是多个数值分量组成的一个集合,那么向量相乘又怎么处理呢?是分量相乘再相加,还是分量相加再相乘?然后就算给一个向量相乘的规范,那有什么意义呢?能解决什么实际问...