精华内容
下载资源
问答
  • 投射变换
    2019-11-07 15:23:05

    estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
    getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
    warpAffine():对输入图像进行仿射变换
    findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。
    getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
    warpPerspective(): 对输入图像进行透射变换
    perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
    estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
    transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
    findFundamentalMat:计算多个点对之间的基矩阵H。
    快速解决:
    问题1:如何计算3个二维点对之间的仿射变换矩阵?
    答:使用getAffineTransform()。
    问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?
    答:使用estimateRigidTransform()或者findHomography。
    问题3:如何计算4个二维点对之间的透射变换?
    答:使用getPerspectiveTransform()。
    问题4:如何计算多个三维点对之间的仿射变换?
    答:使用estimateAffine3D。
    问题5:如何对输入图像进行仿射变换?
    答:使用warpAffine()。
    问题6:如何对输入图像进行透射变换?
    答:使用perspectiveTransform()。
    问题7:如何对输入的二维点对进行仿射变换?
    答:使用transform()。
    问题8:如何对输入的三维点对进行投射变换?
    答:使用perspectiveTransform()。

    更多相关内容
  • 把图像中的ROI区域进行投射变换,得到变换后的图像。 原图为(1600w*1200h 来自网络) (图1): 目的:把原图中的相机部位进行投射到图片左上角(即把相机投射到黄色mask区域) (图2): code: import cv2 import numpy...
    小案例:

    把图像中的ROI区域进行投射变换,得到变换后的图像。

    原图为(1600w*1200h 来自网络) (图1):
    在这里插入图片描述

    目的:把原图中的相机部位进行投射到图片左上角(即把相机投射到黄色mask区域) (图2):
    在这里插入图片描述

    code:
    import cv2
    import numpy as np
    
    def perspective_test():
        im_src = cv2.imread(r'E:\pic\phone2.jpg')
    
        pts_src = np.array([[1146, 259], [1452, 510], [1014, 962], [702, 684]]) # 相机ROI
        pts_dst = np.array([[14, 4], [419, 4], [410, 650], [0, 650]]) # 左上角,即黄色mask
    
        # 画一下图2
        im_trans = im_src.copy()
        cv2.fillConvexPoly(im_trans, pts_dst, (0, 255, 255))
        for i in range(4):
            cv2.line(im_trans, tuple(pts_src[i%4]), tuple(pts_src[(i+1)%4]), (0, 255, 255))
        # cv2.imshow('s', im_trans)
        cv2.imwrite(r'E:\pic\im_show.jpg', im_trans)
    
        # 得到变换矩阵h (或 m)
        h, status = cv2.findHomography(pts_src, pts_dst)
        # m = cv2.getPerspectiveTransform(pts_src, pts_dst)
    
        # size = (200, 500) # 取个小尺寸,从(0, 0)点坐标开始取值
        size = (1600, 1200) # 与原尺寸大小相同
        im_out = cv2.warpPerspective(im_src, h, size) # 投射变换, size为变换后的图像尺寸,从左上角(0, 0)开始算起
        # im_out = cv2.warpPerspective(im_src, m, size)
    
        cv2.imwrite(r'E:\pic\im_src.jpg', im_src)
        cv2.imwrite(r'E:\pic\im_outg100500h.jpg', im_out)
    
        cv2.waitKey(0)
    
    
    if __name__ == '__main__':
        perspective_test()
    

    投射变换后:
    1,size = (1600, 1200)时,相机ROI及附近像素按照投射矩阵h 投射左上角
    在这里插入图片描述

    2,size = (200, 500)时,相机ROI及附近像素按照投射矩阵h 投射左上角,因为size尺寸较小,相应部分如下图
    在这里插入图片描述

    展开全文
  • estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。 getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由...


    estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
    getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
    warpAffine():对输入图像进行仿射变换
    findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。
    getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
    warpPerspective(): 对输入图像进行透射变换
    perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
    estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
    transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
    findFundamentalMat:计算多个点对之间的基矩阵H。
    问题1:如何计算3个二维点对之间的仿射变换矩阵?
    答:使用getAffineTransform()。

    问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?
    答:使用estimateRigidTransform()或者findHomography。

    问题3:如何计算4个二维点对之间的透射变换?
    答:使用getPerspectiveTransform()。

    问题4:如何计算多个三维点对之间的仿射变换?
    答:使用estimateAffine3D。

    问题5:如何对输入图像进行仿射变换?
    答:使用warpAffine()。

    问题6:如何对输入图像进行透射变换?
    答:使用perspectiveTransform()。

    问题7:如何对输入的二维点对进行仿射变换?
    答:使用transform()。

    问题8:如何对输入的三维点对进行投射变换?
    答:使用perspectiveTransform()。


    注意:其中estimateRigidTransform()方法已经停用,可以使用cv2.estimateAffine2D(),cv2.estimateAffinePartial2D()  分别与estimateRigidTransform(:,:,param3)中param3为True和False等效。Partial不包含尺寸。

    展开全文
  • Halcon投射变换和获取四边形顶点

    千次阅读 2017-10-29 12:37:51
    Halcon 投射变换 获取四边形顶点

    例子中用到的图像:

    接着是正文具体代码:

    *参考例子:
    *投射变换和二维码识别:2d_data_codes_rectify_symbol.hdev
    *轮廓转线及调整直线:measure_metal_extended.hdev(例子中还有调整弧线,本例没有用到)
    
    dev_set_draw ('margin')//设置填充模式
    read_image (Image, 'code2d')//获取图片
    threshold (Image, Region, 10, 90)//通过阈值分割,获取二维码的区域
    shape_trans (Region, RegionTrans, 'convex')//把区域的边缘连接起来
    gen_contour_region_xld (RegionTrans, Contours, 'border')//区域转轮廓
    segment_contours_xld (Contours, ContoursSplit, 'lines', 5, 10, 1)//把轮廓断开成线
    XCoordCorners := []//保存四边形的顶点X坐标
    YCoordCorners := []//保存四边形的顶点Y坐标
    *对轮廓进行排序,不排序会影响投射变换操作
    sort_contours_xld (ContoursSplit, SortedRegions, 'lower_left', 'true', 'row')
    count_obj (SortedRegions, Number)//获取区域数量
    for Index := 1 to Number by 1
        select_obj (SortedRegions, ObjectSelected, Index)//遍历区域
        *把弯线变直
        fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
        gen_contour_polygon_xld (Contour, [RowBegin,RowEnd], [ColBegin,ColEnd])//画线看效果
        tuple_concat (XCoordCorners, RowBegin, XCoordCorners)//保存X轴数据
        tuple_concat (YCoordCorners, ColBegin, YCoordCorners)//保存y轴数据
    endfor
    *标记出记录的点
    gen_cross_contour_xld (Crosses, XCoordCorners, YCoordCorners, 6, 0.785398)
    *获取投射变换参数HomMat2D
    hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1,1,1,1], [70,270,270,70], [100,100,300,300], [1,1,1,1], 'normalized_dlt', HomMat2D)
    *对图像进行投射变换
    projective_trans_image (Image, Image_rectified, HomMat2D, 'bilinear', 'false', 'false')
    *以下为对二维码的识别
    create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
    find_data_code_2d (Image_rectified, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
    clear_data_code_2d_model (DataCodeHandle)
    area_center_xld (SymbolXLDs, Area, Row, Column, PointOrder)
    *显示二维码解析到的数据
    disp_message (3600, DecodedDataStrings, 'window', Row+160, Column-100, 'black', 'true')

    展开全文
  • 本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ ...
  • 计算多个二维点对或者图像之间的最优仿射变换矩阵(2行x3列),H可以是部分自由度,比如各向一致的切变。 getAffineTransform() 计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6. warpAffine() 对...
  • OpenCV学习:仿射变换+投射变换+单应性矩阵 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。 getAffineTransform():计算3个二...
  • 变换模型——仿射变换和透射变换

    千次阅读 2020-03-20 13:53:04
    仿射变换是投射变换的一个特例 仿射变换:6参数 投射变换:8参数 仿射变换:包括线性变换(旋转、剪切、缩放)及平移;特点:平行的线变换后依然保持平行。任意的仿射变换都能表示为乘一个矩阵(线性变换),再加一...
  • 图像几何变换——实现伸缩变换,翻转,仿射变换以及透射变换的基础教学。
  • estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由...
  • 在本文首先介绍了引入齐次坐标系的必要性,随后介绍了在几何变换中常见的投射变换和仿射变换,这俩种变换在计算机视觉问题中,包括在相机成像过程中都是很基础并且重要的内容。 如有谬误,请联系指正。转载请注明...
  • 将图片CololfulRose贴在半抛物面上,画出正视图和俯视图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,310
精华内容 3,324
关键字:

投射变换