The Basics of Measure Objects
 
2.1 the process of 1D Edge extraction
 
 
 
Then, the mean gray value along each line of projection is calculated. The sequence of these mean values

is called the profile

简单的说 是以 profile Line 为基准 对profile Line 垂直方向上的 灰度值取平均。这一系列的平均灰度值组成profile。
如果以profile Line 为基准,它的垂线不是 水平或者数值的时候 如上图 (a)(b) ,就需要一个插值操作。目前halcon支持的有'nearest_neighbor', 'bilinear', 'bicubic' 。就如同我们对一副图像进行缩放或者旋转的时候为了尽可能的保证处理后的图像保持原来的细节需要进行插值一样。
我们用测量助手的时候 其中有一个轮廓线的呈现,就是平均灰度值组成的结果。
如下图:
 
 
现在以gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)  为例说明各参数作用。
 
ROW : 测量矩形的Y 中心
COL:  测量矩形的X中心
PHI: 测量矩形旋转角度
Len1,Len2:测量矩形宽高的一半
Width,Height:图像宽高
Interpolation:插值类型
MeasrueHandle:测量句柄
 
关于 测量ROI宽度的选择,如果测量的边缘和profile line 是垂直关系,则宽度尽肯能的宽 这样可以减少噪声.
如果测量的边缘和profileline 不是垂直的关系 则宽度要尽可能的小,相应的噪声增加。
 
综上所述 在ID 测量的时候 最好 将 profile Line 与待测边缘垂直 而且尽可能的宽 以减少噪声。
如果不能保持垂直 那么 ROI的宽度要尽可能小。
 
2.2 create a measure object
 
gen_measure_rectangle2 
gen_measure_arc.
 
2.3 using the measure object
 
 
 
 
 
在用measure_pair 进行测量之前 有必要了解一下halcon的measure_pair 是怎么工作的。
上四副图是halcon的测量助手的截图。
图1是设定的ROI区域
图3 中是灰度均值组成的连续曲线 需要说明的是 图中 最多边和最右边的两条红线是参看线 中间的4组蓝红线才是符合条件的边缘线
图4 是图3的一阶导数    需要说明的是 图中 最多边和最右边的两条红线是参看线 中间的4组蓝红线才是符合条件的边缘线
图2 是各种参数的设置
【最小边缘幅度】= 10 对应measure_pairs中的【threshold】参数 从图4可以看到 图中留下的红蓝线的绝对值都是大于等于10的
【平滑】=0.9 对应 measure_pairs中的【sigma】参数
【将边缘组成边缘对】在没有勾选时measure_pairs 【Transition】=all', 'positive', 'negative',
勾选后为'all_strongest', 'positive_strongest', 'negative_strongest'
'positive': only negative edges, i.e., light-to-dark 只返回负梯度值的边缘,图4中蓝线所示
'negative' :相反。
'all' : 返回的是 正负都有
【位置】all 选择所有  first 选择第一组/条 last 选择最后一组/条
 
 
 
 
boundary一个例子:测保险丝的宽度 Example: solution_guide/basics/fuse.hdev

 
**********************************************
* 思路:1.gen_measure_rectangle2 创建测量区域
             2.measure_pairs 配对
             3.显示结果
****************************************************
 
read_image(Fuse,'fuse')
get_image_size(Fuse,Width,Height)

Row := 297
Column := 545
Lenght1 :=80
Lenght2 :=10

* 旋转90度
Angle :=rad(90)
*Length1 为矩形宽 Length2为矩形高
gen_measure_rectangle2(Row,Column,Angle,Lenght1,Lenght2,Width,Height,\
                       'bilinear',MeasureHandle)
* 对图像的测量区域配对
* 如上实验图为两对直线
*配对后的中心坐标存放在RowEdgeFirst,\
*                                        ColumnEdgeFirst,\
*                                      RowEdgeSecond,\
*                                       ColumEdgeSecond 数组中
*每对线- 两条线的距离在 IntraDistance 数组中
 
measure_pairs(Fuse,MeasureHandle,1,1,'negative','all',RowEdgeFirst,\
              ColumnEdgeFirst,AmpliudeFirst,RowEdgeSecond,\
              ColumEdgeSecond,AmpliudeSecond,IntraDistance,\
              InterDistance)
 
*得到线 如实验图所示
*measure_pairs 得到的只是点现在 计算出线
*gen_contour_polygon_xld(Edge,[0,1,2,2,2],[0,0,0,1,2]) 可以得到这样的图形
*                                    |                   
*                                    |
*                                    |————
*    左下   以坐上角(0,0)为原点
for i :=0 to | RowEdgeFirst |-1 by 1
    gen_contour_polygon_xld (EdgeFirst, \
                            [-sin(Angle+rad(90))*Lenght2+RowEdgeFirst[i],\
                             -sin(Angle-rad(90))*Lenght2+RowEdgeFirst[i]],\
                            [cos(Angle+rad(90))*Lenght2+ColumnEdgeFirst[i], \
                            cos(Angle-rad(90))*Lenght2+ColumnEdgeFirst[i]])
    gen_contour_polygon_xld (EdgeSecond, \
                             [-sin(Angle+rad(90))*Lenght2+RowEdgeSecond[i],\
                             -sin(Angle-rad(90))*Lenght2+RowEdgeSecond[i]],\
                             [cos(Angle+rad(90))*Lenght2+ColumEdgeSecond[i], \
                             cos(Angle-rad(90))*Lenght2+ColumEdgeSecond[i]])

dev_set_color ('cyan')
    dev_display (EdgeFirst)
    dev_set_color ('magenta')
    dev_display (EdgeSecond)
    dev_set_color ('blue')

endfor

 
 
 
 
一个例子: 检测铸造零件 Example: hdevelop/Applications/Measuring-2D/measure_arc.hdev
 
******************************
*measure_pos
*思路:先生成一个圆弧,即弧线上的点作为测量区域
*           用measure_pos测量弧线的点得出 孔间距离
************************************
read_image(Zeiss1,'zeiss1')
get_image_size(Zeiss1,Width,Height)
dev_close_window()
dev_open_window(0,0,Width/2,Height/2,'black',WindowHandle)
dev_display(Zeiss1)
Row := 275
Column :=335
Radius :=107
AngleStart :=-rad(55)
AngleExtent :=rad(170)

*获取椭圆指定角度的点坐标
get_points_ellipse(AngleStart+AngleExtent,Row,Column,0,Radius,Radius,\
                     RowPoint,ColPoint )

dev_set_draw('fill')
dev_set_color('green')
dev_set_line_width(1)

*显示圆
disp_arc (WindowHandle, Row, Column, AngleExtent,RowPoint, ColPoint)
*生成测量圆弧
gen_measure_arc(Row,Column,Radius,AngleStart,AngleExtent,10,\
                Width,Height,'nearest_neighbor',MeasureHandle)
*测量
measure_pos(Zeiss1,MeasureHandle,1,10,'all','all',RowEdge,\
            ColumnEdge,Amplitude,Distance)
*计算距离
distance_pp(RowEdge[1],ColumnEdge[1],RowEdge[2],ColumnEdge[2],IntermeDist)

dev_set_color('red')
dev_set_line_width(3)
disp_line(WindowHandle,RowEdge[1],ColumnEdge[1],RowEdge[2],ColumnEdge[2])

disp_message(WindowHandle,'Distance: ' + IntermeDist , 'image',\
               250,8,'yellow','false')

close_measure(MeasureHandle)

 
 
例子:Fuzzy Measuring Example: hdevelop/Applications/Measuring-2D/fuzzy_measure_pin.hdev
 
没看懂

例子:Measuring Leads of a Moving IC  测量电路板的针脚边缘

 
 
**************************************************************
*              create_shape_model(Template : :
*                                             NumLevels,   * 金字塔 默认设置 'auto'  可以使用inspect_shape_model来试着确定NumLevels
*                                             AngleStart,    *起始角度
*                                             AngleExtent,  *角度幅度 顺时针
*                                                           *对于角度,不可以这样:比如 AngleStart :=350 AngleExtent :=20,这样到360就会停止,而应该是这样AngleStart:=-10
*                                            AngleStep,       *一次旋转多少度
*                                            Optimization,   *这个用于优化生成模型的 点 尤其是对于比较大的图像, If Optimization = 'none', all model points are stored ,其他未知
*                                            Metric,            *If Metric = 'use_polarity', the object in the image and the model must have the same contrast. If, for example, the model is a bright *                                                                   *object on a dark background, the object is found only if it is also brighter than the background.
*                                            Contrast,         *二值化阈值 可以通过inspect_shape_model 试着确定
*                                             MinContrast :  * 和 Contrast 组成一个 阈值范围
*                                              ModelID)    
*
*
*   inspect_shape_model(Image :   * 输入 -- 建模的图片
*                                         ModelImages,  * 输出 --金子塔图片 如果NumLevels = 4 那就是四张哦
*                                         ModelRegions : *输出 --二值后的模型
*                                        NumLevels,        * 输入 -- 金字塔等级
*                                         Contrast : )        * 二值化阈值       
*    find_shape_model(Image : : ModelID, AngleStart, AngleExtent,
*                                     MinScore, * 最小相似度 如 0.7 则要 70%相似
*                                      NumMatches, *
*                                    MaxOverlap,    *如果模型是一个 对称的模型 ,那么在找模型的时候 可能会有重叠的区域 哦说不清楚额[0.0,1.0]
*                                       SubPixel,
*                                         NumLevels, * 金字塔数 可选值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
*                                             Greediness : *  of the search heuristic (0: safe but slow; 1: fast but matches may be missed
*                     Row, Column, Angle, Score)
*                   
*             思路:以芯片的字母区域做基准, 用模型匹配来校准 测量区域
*                     
**********************************************************

dev_update_pc('off')
dev_update_window('off')
dev_update_var('off')
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, \
                   'default', 'default', 'default', 'board/board.seq', 'default',\
                   -1, -1, FGHandle)

grab_image(Image,FGHandle)

get_image_size(Image,Width,Height)

dev_close_window()
dev_open_window(0,0,Width,Height,'black',WindowHandle)
dev_set_window(WindowHandle)

dev_display(Image)
Row1 :=188
Column1 :=182
Row2 :=298
Column2 :=412

gen_rectangle1(Rectangle,Row1,Column1,Row2,Column2)
area_center(Rectangle,Area,Row,Column)
dev_display(Rectangle)

Rect1Row :=-102
Rect1Col :=5
Rect2Row :=107
Rect2Col :=5
RectPhi :=0
RectLength1 :=170
RectLength2 :=5
gen_rectangle2 (Rectangle1, Row+Rect1Row, Column+Rect1Col, RectPhi, RectLength1, RectLength2)
gen_rectangle2 (Rectangle2, Row+Rect2Row, Column+Rect2Col, RectPhi, RectLength1, RectLength2)
dev_display(Rectangle1)
dev_display(Rectangle2)

*创建模型
reduce_domain(Image,Rectangle,ImageReduced)
create_shape_model (ImageReduced,'auto', 0, rad(360), rad(1), 'none', 'use_polarity', 30, 'auto', ModelID)
*获取模型轮廓 shapeModel 在下面有用到哦
*shapeMode 是基准 ,这里shapemodel 的中心点 是原点(0,0) 也就是图像的左上角
get_shape_model_contours(ShapeModel,ModelID,1)

*这段代码没用 囧 ~~ 例子里写这段干嘛 不嫌长啊
*
*创建变换矩阵
*hom_mat2d_identity(HomMat2DIndentity)
*平移矩阵
*hom_mat2d_translate(HomMat2DIndentity,Row,Column,HomMat2DTranslate)
*shapeModel平移 ,这样就到了原来的位置
*因为没有旋转,所以不需要旋转变换了
*affine_trans_contour_xld(ShapeModel,ShapeMOdelTrans,HomMat2DTranslate)

disp_message(WindowHandle,['Press left button to start','and stop the demo'],\
              'image',12,12,'black','true')
get_mbutton(WindowHandle,Row3,Column3,Button1)

Button :=0
while(Button #1)
    dev_set_window(WindowHandle)
    dev_set_part(0,0,Height-1,Width-1)

grab_image(ImageCheck,FGHandle)
    dev_display(ImageCheck)
    *得到匹配模型的位置和旋转角度
    find_shape_model (ImageCheck, ModelID, rad(0), rad(360), 0.7, 1, 0.5, 'least_squares', 4, 0.7,\
                      RowCheck, ColumnCheck, AngleCheck, Score)

if(|Score| > 0)
        dev_set_color('green')
        *这里对shapeModel(基准shapemodel 是在图像原点的) 做平移和旋转操作.
        hom_mat2d_identity(HomMat2DIndentity)
        hom_mat2d_translate(HomMat2DIndentity,RowCheck,ColumnCheck,HomMat2DTranslate)
        hom_mat2d_rotate(HomMat2DTranslate,AngleCheck,RowCheck,ColumnCheck,HomMat2DRotate)
        affine_trans_contour_xld(ShapeModel,ShapeModelTrans,HomMat2DRotate)
        dev_display(ShapeModelTrans)
        *这里是对测量区域做校准,图像变换后,测量区域也是要跟着变的饿
        *根据新的变换矩阵,以 测量区域 Rect1Row等 求出变换后的 新Rect1RowCheck
        *这样就可以创建新的 测量区域了
        affine_trans_pixel(HomMat2DRotate,Rect1Row,Rect1Col,Rect1RowCheck,Rect1ColCheck)
        affine_trans_pixel(HomMat2DRotate,Rect2Row,Rect2Col,Rect2RowCheck,Rect2ColCheck)
        gen_rectangle2(Rectangle1Check,Rect1RowCheck,Rect1ColCheck,AngleCheck,RectLength1,RectLength2)
        gen_rectangle2(Rectangle2Check,Rect2RowCheck,Rect2ColCheck,AngleCheck,RectLength1,RectLength2)
        dev_set_color('blue')
        dev_set_draw('margin')
        dev_set_line_width(3)
        dev_display(Rectangle1Check)
        dev_display(Rectangle2Check)

gen_measure_rectangle2 (Rect1RowCheck, Rect1ColCheck, AngleCheck, RectLength1, RectLength2,\
                                Width, Height, 'nearest_neighbor', MeasureHandle1)
        gen_measure_rectangle2 (Rect2RowCheck, Rect2ColCheck, AngleCheck, RectLength1, RectLength2,\
                                Width, Height, 'nearest_neighbor', MeasureHandle2)

measure_pairs (ImageCheck, MeasureHandle1, 2, 90, 'positive', 'all', RowEdgeFirst1, \
                       ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, IntraDistance1, InterDistance1)     
        measure_pairs (ImageCheck, MeasureHandle2, 2, 90, 'positive', 'all', RowEdgeFirst2, \
                       ColumnEdgeFirst2, AmplitudeFirst2, RowEdgeSecond2, ColumnEdgeSecond2, AmplitudeSecond2, IntraDistance2, InterDistance2)
        close_measure(MeasureHandle1)
        close_measure(MeasureHandle2)

dev_set_color('red')
        dev_set_draw('fill')
        disp_line (WindowHandle, RowEdgeFirst1-RectLength2*cos(AngleCheck), ColumnEdgeFirst1-RectLength2*sin(AngleCheck), RowEdgeFirst1+RectLength2*cos(AngleCheck), ColumnEdgeFirst1+RectLength2*sin(AngleCheck))
        disp_line (WindowHandle, RowEdgeSecond1-RectLength2*cos(AngleCheck), ColumnEdgeSecond1-RectLength2*sin(AngleCheck), RowEdgeSecond1+RectLength2*cos(AngleCheck), ColumnEdgeSecond1+RectLength2*sin(AngleCheck))
        disp_line (WindowHandle, RowEdgeFirst2-RectLength2*cos(AngleCheck), ColumnEdgeFirst2-RectLength2*sin(AngleCheck), RowEdgeFirst2+RectLength2*cos(AngleCheck), ColumnEdgeFirst2+RectLength2*sin(AngleCheck))
        disp_line (WindowHandle, RowEdgeSecond2-RectLength2*cos(AngleCheck), ColumnEdgeSecond2-RectLength2*sin(AngleCheck), RowEdgeSecond2+RectLength2*cos(AngleCheck), ColumnEdgeSecond2+RectLength2*sin(AngleCheck))   
        wait_seconds(2)
    endif
  * get_mposition (WindowHandle, R, C, Button)
endwhile

 
例子:Inspect IC Example: hdevelop/Applications/Measuring-2D/measure_pin.hdev
图0
 
 
图1 :sigma = 1.0
 
图2 sigma=1.5

图3 sigma =3.0

*************************************************************

*

*①测量针脚个数,宽度,间距
*②测量针脚长度
*measure_pairs    与 measure_pos 的不同
*在此例子中 meausre_pairs 用于检测针脚宽度 measure_pos 用于检测阵脚高度
* measure_pairs 适用于处理用边缘包围的物体,如针脚宽度,中间有白色区域将每个针脚隔开,而且可以根据Transition参数将得到不同的测量结果,
* 如阵脚两侧的边缘点(这些点是图0左红线的中心点) 结果返回在RowEdgeFirst, ColumnEdgeFirst,RowEdgeSecond, ColumnEdgeSecond 数* 组中
* 而遇到图0右 中测量针脚高度的时候 就可以用measure_pos
*measure_pairs(Image : : MeasureHandle,
*                                     Sigma,       *高斯平滑参数-- [0.4 , 100] 具体参数效果如上图1,2所示
*                                     Threshold,  *阈值
*                                    Transition,    *List of values: 'all', 'positive', 'negative', 'all_strongest', 'positive_strongest', 'negative_strongest'     
*                                             *参数含义见说明文档                               
*                                     Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond,
*                                                ,AmplitudeSecond,
*                                     IntraDistance, *在此例子中是针脚宽度的数组
*                                    InterDistance)  *在此例子中是 针脚间的间距
*
*
*                         Distance) * 在此例子中是图0右边四条红线的间距,即有三个间距。
****************************************************************
dev_close_window()
read_image(Image,'ic_pin')
get_image_size(Image,Width,Height)
dev_open_window(0,0,Width/2,Height/2,'black',WindowHandle)
dev_display(Image)

Row :=47
Column :=485
Phi :=0
Length1 :=420
Length2 :=10
dev_set_color('green')
dev_set_draw('margin')
dev_set_line_width(3)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Width,Height,\
                       'nearest_neighbor',MeaserHandle)

* If Transition = 'negative', the edge points with a light-to-dark transition
*in the direction of the major axis of the rectangle are returned in RowEdgeFirst
*and ColumnEdgeFirst. In this case, the corresponding edges with a drak-to-light
*transition are returned in RowEdgeSecond and ColumnEdgeSecond

*sigma 参数效果如上图1,2所示
measure_pairs (Image, MeaserHandle, 1.5, 30, 'negative', 'all', RowEdgeFirst,\
               ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond,\
               AmplitudeSecond, PinWidth, PinDistance)

disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond,\
           ColumnEdgeSecond)

avgPinWidth :=sum(PinWidth)/|PinWidth|
avgPinDistance :=sum(PinDistance)/|PinDistance|
numPins :=|PinWidth|

dev_set_color('yellow')
disp_message(WindowHandle,'Number of pins :'+numPins,'image',200,100,'yellow','false')
disp_message(WindowHandle,'Average Pin Width:' +avgPinWidth,'image',260,100,'yellow','false')

*来个特写
stop()
Row1 := 0
Column1 := 600
Row2 := 100
Column2 := 700
dev_set_color ('blue')
disp_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
dev_set_part(Row1,Column1,Row2,Column2)
dev_display(Image)
dev_set_color('green')
dev_display(Rectangle)
dev_set_color('red')
disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond,\
           ColumnEdgeSecond)
close_measure(MeaserHandle)
stop()
dev_set_part(0,0,Height-1,Width-1)
dev_display(Image)
dev_set_line_width(3)
Row := 508
Column := 200
Phi := -rad(90)
Length1 := 482
Length2 := 35
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
measure_pos (Image, MeasureHandle, 1.5, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
disp_line(WindowHandle,RowEdge,ColumnEdge-Length2,RowEdge,ColumnEdge+Length2)
PinHeight1 :=RowEdge[1] - RowEdge[0]
PinHeight2 :=RowEdge[3] - RowEdge[2]
disp_message(WindowHandle,'Pin Height:'+PinHeight1,'image',\
             RowEdge[1],ColumnEdge[1]+100,'yellow','false')
disp_message(WindowHandle,'Pin Height:'+PinHeight2,'image',\
             RowEdge[3]-50,ColumnEdge[3]+100,'yellow','false')
close_measure(MeasureHandle)

Suppress  Clutter ro Noise 抑制噪声

 

In many applications there is clutter or noise that must be suppressed. The measure operators offer
multiple approaches to achieve this. The best one is to increase the threshold for the edge extraction to
eliminate faint edges. In addition, the value for the smoothing parameter can be increased to smooth
irrelevant edges away.
When grouping edges to pairs, noise edges can lead to an incorrect grouping if they are in the vicinity of
the “real” edge and have the same polarity. In such a case you can suppress the noise edges by selecting
only the strongest edges of a sequence of consecutive rising and falling edges.

 
通过增大阈值 或者 smoothing parameter 减少不相关的噪声。
当我们配对的时候噪声边缘将影响结果的正确性, 我们可以通关选择 the strongest edges of a sequence of consecutive rising and falling edges
 
 
Reuse Measure Object 在利用 measure object
 
Because the creation of a measure object needs some time, we recommend to reuse them if possible.
If no alignment is needed, the measure object can, for example, be created offline and reused for each
image. If the alignment involves only a translation, translate_measure can be used to correct the
position.
如图所示有两个 measure object
通过translate_measure (MeasureHandle, RowBottom, Column) 可以只生成一个 measure rectangle 另一个用该函数重新利用
 
Use an Absolute Gray Value Threshold
As an alternative to edge extraction, the measurements can be performed based on an absolute gray value
threshold by using the operator measure_thresh. Here, all positions where the gray value crosses the
given threshold are selected.
 
 Fuzzy Measuring
In case there are extra edges that do not belong to the measurement, HALCON offers an extended
version of measuring: fuzzy measuring. This tool allows to define so-called fuzzy rules, which describe
the features of good edges. Possible features are, e.g., the position, the distance, the gray values, or the
amplitude of edges. These functions are created with create_funct_1d_pairs and passed to the tool
with set_fuzzy_measure. Based on these rules, the tool will select the most appropriate edges.
The advantage of this approach is the flexibility to deal with extra edges even if a very low min-
imum threshold or smoothing is used. An example for this approach is the example program
fuzzy_measure_pin.hdev on page 53.
Please refer to the Solution Guide III-A, chapter 4 on page 33, for more information.
 
Evaluation of Gray Values
To have full control over the evaluation of the gray values along the measurement line or arc, you can use
measure_projection. The operator returns the projected gray values as an array of numbers, which
can then be further processed with HALCON operators for tuple or function processing (see the chapters
“Tuple” and “Tools . Function” in the Reference Manual). Please refer to the Solution Guide III-A,
section 3.4 on page 22, for more information.
 
 
 
 
 

1D mesauring的更多相关文章

  1. 解决: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19

    错误信息:C:\Python27\lib\site-packages\sklearn\utils\validation.py:395: DeprecationWarning: Passing 1d a ...

  2. sklearn中报错ValueError: Expected 2D array, got 1D array instead:

    from sklearn.linear_model import LinearRegression lr = LinearRegression() print(tr_x.shape,tr_y.shap ...

  3. CUDA编程模型——组织并行线程2 (1D grid 1D block)

    在”组织并行编程1“中,通过组织并行线程为”2D grid 2D block“对矩阵求和,在本文中通过组织为 1D grid 1D block进行矩阵求和.一维网格和一维线程块的结构如下图: 其中,n ...

  4. Halcon 1D测量

    1.产生测量句柄,准备提取与矩形(圆弧)主轴垂直的值边缘. gen_measure_rectangle2或gen_measure_arc 2.测量边缘对   ,测量的直线与矩形或者圆弧垂直 measu ...

  5. 1D Blending

    [1D Blending] BlendTree有类型之分,分为1D.2D.本文记录1D. 1D Blending blends the child motions according to a sin ...

  6. 网桥 以及 IEEE802.1D 生成树协议

    (一)网桥 网桥是一个layer 2设备,能够连接两个不同的网段. 如图

  7. 算法优化》关于1D*1D的DP的优化

    关于这一主题的DP问题的优化方法,我以前写过一篇博客与其有关,是关于对递推形DP的前缀和优化,那么这种优化方法就不再赘述了. 什么叫1D*1D的DP捏,就是一共有N种状态,而每种状态都要N种决策,这就 ...

  8. 解决如下出错:DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19.

    背景:在Spyder中写几行脚本,目的是应用sklearn自带的svm(支持向量机)算法,来对其自带的digits(手写体数字)数据集进行分类,过程包括训练阶段和预测阶段.将手写体数字数据的特征数据d ...

  9. I - 一次元リバーシ / 1D Reversi(水题)

    Problem Statement Two foxes Jiro and Saburo are playing a game called 1D Reversi. This game is playe ...

随机推荐

  1. maven install jdk版本自动降为1.7

    开发过程中遇到了一个奇怪的现象. IDEA中所有的设置都改成了1.8,但是在执行maven install时却自动降为1.7,报错提示: [ERROR] Failed to execute goal ...

  2. 什么是HotSpot VM

    学习并转载自https://www.cnblogs.com/charlesblc/p/5993804.html 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJD ...

  3. 判断变量是否为 NaN

    首先要明确 NaN 的一个特性, NaN不能用相等操作符(== 和 ===) 来判断, NaN === NaN 会返回 false: 下面是测试代码: console.log(isNaN('1')) ...

  4. jvm学习(重点)

    http://blog.csdn.net/yfqnihao/article/details/8271665 http://blog.csdn.net/cutesource/article/detail ...

  5. JS变量比较陷阱

    我们觉得JS简单是因为它是弱类型的语言,不像java那样对对类型那样敏感,但js也有其不尽人意的地方. 在java中我们无法将数字与字符串直接比较,而js能,而且能直接转换成数值比较,但是如果是字符串 ...

  6. CSS Margin(外边距)

    CSS Margin(外边距) 一.简介 CSS margin(外边距)属性定义元素周围的空间. margin 清除周围的(外边框)元素区域.margin 没有背景颜色,是完全透明的. margin ...

  7. 非root权限 安装更新gcc

    本文主要参考网络上文章,并根据自己安装出现的问题进行补充. 参考文章: 1.gcc和boost的升级步骤(非root权限):https://blog.csdn.net/u010246947/artic ...

  8. VisualStudio下如何编译和使用最新版本的OpenCV(修正版)

    OpenCV是托管于GitHub的开源项目,本文具体解决一个问题,就是“获取最新版本的OpenCV,并且在自己的项目中使用起来"   最新版本 2017年3月31日 BY:jsxyhelu ...

  9. 20145230熊佳炜《逆向及BOF基础实践》

    20145230熊佳炜<逆向及BOF基础实践> 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序同时包含另一个代码片段,getShell,会返回一个可用Shell. ...

  10. Could not reserve enough space for 1572864KB object heap

    This problem might be caused by incorrect configuration of the daemon.For example, an unrecognized j ...