精华内容
下载资源
问答
  • Halcon 3 ---- 像素和亚像素

    千次阅读 2018-08-12 22:42:29
    像素和亚像素,听起来视乎很厉害,但是理解起来就容易了 Halcon中的 ROI(region of interest) 感兴趣的区域,这个是 像素级别的,也就是说这个区域是沿着像素点的边缘行走,例如一个圆,当你放大看的时候,其实...

    像素和亚像素,听起来视乎很厉害,但是理解起来就容易了

    Halcon中的 ROI(region of interest) 感兴趣的区域,这个是 像素级别的,也就是说这个区域是沿着像素点的边缘行走,例如一个圆,当你放大看的时候,其实是很多个正方形组成的,也就是一个个像素。

    Halcon中的 XLD(eXtended Line Descriptions) 扩展的线性描述,通俗来说就是 轮廓。这个是亚像素级别的,这个轮廓是没有明显界限的,也就是它可以从像素中间穿过,形成一个平滑的轮廓。用XLD来表示一个圆,那这个圆就是一个圆滑的圆,而不是ROI那样边界是锯齿形的圆

     

    展开全文
  • imgproc.so \ /usr/local/lib/libopencv_imgcodecs.so LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_calib3d (一)棋盘格角点检测和亚像素检测 #include <iostream> #...

    pro文件:

    INCLUDEPATH += /usr/local/include \
                   /usr/local/include/opencv \
                   /usr/local/include/opencv2
    
    LIBS += /usr/local/lib/libopencv_highgui.so \
            /usr/local/lib/libopencv_core.so    \
            /usr/local/lib/libopencv_imgproc.so \
            /usr/local/lib/libopencv_imgcodecs.so
    
    LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_calib3d
    

    (一)棋盘格角点检测和亚像素检测

    #include <iostream>
    #include <string>
    #include <opencv2/opencv.hpp>
    #include <cv.h>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/types_c.h>
    using namespace cv;
    using namespace std;
    
    int main()
    {
        cv::Mat image_color = cv::imread("/home/fan/Pictures/chessboard.png", cv::IMREAD_COLOR);
        //角点检测程序
        cv::Mat image_gray;
        cv::cvtColor(image_color, image_gray, cv::COLOR_BGR2GRAY);
        std::vector<cv::Point2f> image_corners;
        bool ret = cv::findChessboardCorners(image_gray,
                                             cv::Size(6,8),
                                             image_corners,
                                             cv::CALIB_CB_ADAPTIVE_THRESH |
                                             cv::CALIB_CB_NORMALIZE_IMAGE);
        cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,40,0.1);//指定亚像素计算迭代标注
        cv::cornerSubPix(image_gray, image_corners, cv::Size(5, 5), cv::Size(-1, -1), criteria);//亚像素检测
        cv::drawChessboardCorners(image_color, cv::Size(6,8),image_corners,ret);//角点绘制
        cv::imshow("chessboard image_corners", image_color);
        cout<<"角点坐标系:"<<endl<<image_corners<<endl;
    }
    

    (一)任意图像的角点检测和亚像素检测

    #include <iostream>
    #include <string>
    #include <opencv2/opencv.hpp>
    #include <cv.h>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/types_c.h>
    
    //#include <opencv2/highgui/highgui.hpp>
    
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
        cv::Mat image_color = cv::imread("/home/fan/Pictures/road1.png", cv::IMREAD_COLOR);
        //角点检测程序
        cv::Mat image_gray;
        cv::cvtColor(image_color, image_gray, cv::COLOR_BGR2GRAY);
    
        //设置角点检测参数
            std::vector<cv::Point2f> corners;
            int max_corners = 500;
            double quality_level = 0.01;
            double min_distance = 3.0;
            int block_size = 3;
            bool use_harris = false;
            double k = 0.04;
    
        cv::goodFeaturesToTrack(image_gray,
                                corners,
                                max_corners,
                                quality_level,
                                min_distance,
                                cv::Mat(),
                                block_size,
                                use_harris,
                                k);
    
        cv::TermCriteria criteria = cv::TermCriteria(
                            cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,
                            40,
                            0.01);
        //亚像素检测
        cv::cornerSubPix(image_gray, corners, cv::Size(5, 5), cv::Size(-1, -1), criteria);
        cout<<"corners:"<<endl<<corners<<endl;
        //将检测到的角点绘制到原图上
        for (int i = 0; i < corners.size(); i++)
        {
            cv::circle(image_color, corners[i], 1, cv::Scalar(0, 0, 255), 2, 8, 0);
        }
        cv::imshow("house corner", image_color);
        cv::imwrite("/home/fan/Pictures/corners_road1.png",image_color);
        cv::waitKey(100000);
        return 0;
     }
    

    参考文章:https://blog.csdn.net/guduruyu/article/details/69537083

    展开全文
  • 首先进行粗检测,函数goodFeaturesToTrack,存储进入corners中,然后cornerSubPix函数进行亚像素精确匹配,设置结束条件。 由于实际应用中线条较粗,因此 CORNER_BLOCKSIZE = 9; CORNER_QUALITYLEVEL = 0.6; ...

     首先进行粗检测,函数goodFeaturesToTrack,存储进入corners中,然后cornerSubPix函数进行亚像素精确匹配,设置结束条件。

    由于实际应用中线条较粗,因此

    CORNER_BLOCKSIZE = 9;

    CORNER_QUALITYLEVEL = 0.6;

    其他参数可以微调。

        std::vector<cv::Point2f> corners;
        //double qualityLevel = 0.5;
        double minDistance = 10;
        int blockSize = CORNER_BLOCKSIZE, gradientSize = CORNER_BLOCKSIZE;
        bool useHarrisDetector = true;
        double k = 0.04;
        cv::Mat copy = img3.clone();
        cv::goodFeaturesToTrack( copy,
                             corners,
                             MAX_CORNERS,
                             CORNER_QUALITYLEVEL,
                             minDistance,
                             cv::Mat(),
                             blockSize,
                             gradientSize,
                             useHarrisDetector,
                             k );
        int radius = 4;
        for( size_t i = 0; i < corners.size(); i++ )
        {
            cv::circle( copy, corners[i], radius, cv::Scalar(rng.uniform(0,255), rng.uniform(0, 256), rng.uniform(0, 256)), cv::FILLED );
        } 
    
    	cv::TermCriteria criteria = cv::TermCriteria(
    					cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,
    					40,
    					0.001);
     
    
    	cv::cornerSubPix(img3, corners, cv::Size(CORNER_BLOCKSIZE, CORNER_BLOCKSIZE), cv::Size(-1, -1), criteria);
     
    	for (int i = 0; i < corners.size(); i++)
    	{
    		cv::circle(img3, corners[i], radius, cv::Scalar(rng.uniform(0,255), rng.uniform(0, 256), rng.uniform(0, 256)), cv::FILLED );
      }
      

    参考:https://docs.opencv.org/master/dd/d92/tutorial_corner_subpixels.html

    展开全文
  • Harris、Shi-Tomasi和亚像素角点都是角点,隶属于特征点这个大类(特征点可以分为边缘、角点、斑点). 一、Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性较高,但是也可能出现有用信息丢失的情况。 ...

    Harris、Shi-Tomasi和亚像素角点都是角点,隶属于特征点这个大类(特征点可以分为边缘、角点、斑点).

    一、Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性较高,但是也可能出现有用信息丢失的情况。
    函数:cornerHarris()
    void cv::cornerHarris ( InputArray  src,  //需要为8位单通道
        OutputArray  dst,  //结果
        int  blockSize, //领域大小
        int  ksize, //Sobel孔径大小
        double  k, //Harris参数
        int  borderType = BORDER_DEFAULT 
      )    

    Harris corner detector.

    The function runs the Harris corner detector on the image. Similarly to cornerMinEigenVal and cornerEigenValsAndVecs , for each pixel (x, y) it calculates a 2\times2 gradient covariance matrix M^{(x,y)} over a \texttt{blockSize} \times \texttt{blockSize} neighborhood. Then, it computes the following characteristic:

    (特征点计算方法)

     

     

    Corners in the image can be found as the local maxima of this response map.

    Parameters
    src Input single-channel 8-bit or floating-point image.
    dst Image to store the Harris detector responses. It has the type CV_32FC1 and the same size as src .
    blockSize Neighborhood size (see the details on cornerEigenValsAndVecs ).
    ksize Aperture parameter for the Sobel operator.
    k Harris detector free parameter. See the formula below.
    borderType Pixel extrapolation method. See cv::BorderTypes.
    调用:
     
        Mat srcGray = imread("e:/template/lena.jpg",IMREAD_GRAYSCALE);
        //进行角点检测
        Mat matHarris;
        cornerHarris(srcGray,matHarris,2,3,0.01);
        //显示
        Mat matDst;
        threshold(matHarris,matDst,0.00001,255,THRESH_BINARY);
        imshow("matDst",matDst);
        waitKey(0);
    lena的结果:
    二、Shi-Tomasi角点
    一般认为是Harris的改进,因为当时提出的论文叫做《Good Features to Track》,所以这种角点再OpenCV中叫做goodFeatures
    函数:goodFeaturesToTrack()
    void cv::goodFeaturesToTrack ( InputArray  image,//输入图像
        OutputArray  corners,//输出向量
        int  maxCorners,//角点最大数量
        double  qualityLevel,//角点检测可接受的最小特征值
        double  minDistance,//角点之间的最小距离
        InputArray  mask = noArray(),//感兴趣区域
        int  blockSize = 3,//领域范围
        bool  useHarrisDetector = false,//true为harris;false为Shi-Tomasi
        double  k = 0.04 //权重系数
      )    

    Determines strong corners on an image.

    The function finds the most prominent corners in the image or in the specified image region, as described in [154]

    • Function calculates the corner quality measure at every source image pixel using the cornerMinEigenVal or cornerHarris .
    • Function performs a non-maximum suppression (the local maximums in 3 x 3 neighborhood are retained).
    • The corners with the minimal eigenvalue less than qualityLevelmaxx,yqualityMeasureMap(x,y) are rejected.
    • The remaining corners are sorted by the quality measure in the descending order.
    • Function throws away each corner for which there is a stronger corner at a distance less than maxDistance.

    The function can be used to initialize a point-based tracker of an object.

    Note
    If the function is called with different values A and B of the parameter qualityLevel , and A > B, the vector of returned corners with qualityLevel=A will be the prefix of the output vector with qualityLevel=B .
    Parameters
    image Input 8-bit or floating-point 32-bit, single-channel image.
    corners Output vector of detected corners.
    maxCorners Maximum number of corners to return. If there are more corners than are found, the strongest of them is returned. maxCorners <= 0 implies that no limit on the maximum is set and all detected corners are returned.
    qualityLevel Parameter characterizing the minimal accepted quality of image corners. The parameter value is multiplied by the best corner quality measure, which is the minimal eigenvalue (see cornerMinEigenVal ) or the Harris function response (see cornerHarris ). The corners with the quality measure less than the product are rejected. For example, if the best corner has the quality measure = 1500, and the qualityLevel=0.01 , then all the corners with the quality measure less than 15 are rejected.
    minDistance Minimum possible Euclidean distance between the returned corners.
    mask Optional region of interest. If the image is not empty (it needs to have the type CV_8UC1 and the same size as image ), it specifies the region in which the corners are detected.
    blockSize Size of an average block for computing a derivative covariation matrix over each pixel neighborhood. See cornerEigenValsAndVecs .
    useHarrisDetector Parameter indicating whether to use a Harris detector (see cornerHarris) or cornerMinEigenVal.
    k Free parameter of the Harris detector.
    调用:
    Mat srcGray = imread("e:/template/lena.jpg",IMREAD_GRAYSCALE);    
    //进行角点检测
        Mat matHarris;
        vector<Point2f> corners;//输出向量
        goodFeaturesToTrack(srcGray,corners,100,0.01,10,Mat(),3,false,0.04);
        //显示
        Mat matDst = srcGray.clone();
        for (int i=0;i<corners.size();i++)
        {
            circle(matDst,corners[i],2,Scalar(255));
        }
         
        imshow("matDst",matDst);
        waitKey(0);
    结果:
    可以看到,眼部、帽子上面的尖端这些的却是"GoodFeatures"的地方都被标注了出来
    三、如果需要亚像素的角点,我们必须更进一步。
    函数:cornerSubPix()
    void cv::cornerSubPix ( InputArray  image,
        InputOutputArray  corners,
        Size  winSize,
        Size  zeroZone,
        TermCriteria  criteria 
      )    
    调用:需要注意现计算goodfeatures再算亚像素
    Mat srcGray = imread("e:/template/lena.jpg",IMREAD_GRAYSCALE);
        //进行角点检测
        Mat matHarris;
        vector<Point2f> corners;//输出向量
        cv::goodFeaturesToTrack(
            srcGray,                              // Image to track
            corners,                          // Vector of detected corners (output)
            MAX_CORNERS,                       // Keep up to this many corners
            0.01,                              // Quality level (percent of maximum)
            5,                                 // Min distance between corners
            cv::noArray(),                     // Mask
            3,                                 // Block size
            false,                             // true: Harris, false: Shi-Tomasi
            0.04                               // method specific parameter
            );
        cv::cornerSubPix(
            srcGray,                          // Input image
            corners,                          // Vector of corners (input and output)
            cv::Size(55),      // Half side length of search window
            cv::Size(-1,-1),                   // Half side length of dead zone (-1=none)
            cv::TermCriteria(
                cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
                20,                              // Maximum number of iterations
                0.03                             // Minimum change per iteration
                )
            );
        //显示
        Mat matDst = srcGray.clone();
        for (int i=0;i<corners.size();i++)
        {
            circle(matDst,corners[i],2,Scalar(255));
            cout<<"\t"<<"序号"<<i<<"亚像素坐标("<<corners[i].x<<","<<corners[i].y<<")"<<endl;
        }
         
        imshow("matDst",matDst);
        waitKey(0);
    结果:
    可以看到其计算处理小数点后面的值。
    四、小结
    角点虽然现在用的比较少了,但是作为基本的知识有必要了解;下一步的更为复杂的特征点模型都是基于角点的,它们之间有着一脉相承的关系。

     

    目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
    展开全文
  • 基于临界灰度值和亚像素的“边缘寻找”算法 本文将围绕一个实例,主要就测量物体长度的算法加以阐述。现在假设我们要在图像中测量物体的长度。如图1所示,虚线内为图像范围,图中背景为白色,被测物呈黑色。 图1 待...
  • 本文将围绕一个实例,主要就测量物体长度的算法加以阐述。现在假设我们要在图像中测量物体的长度。如图1所示,虚线内为图像范围,图中背景为...下面将具体说明基于临界灰度值和亚像素的边缘寻找算法。 图2 内存中的
  • 像素卷积和转置卷积

    千次阅读 2019-05-20 15:27:14
    CNN中对特征图进行上采样常用的操作有转置卷积和亚像素卷积 1、转置卷积 转置卷积(Transposed Convolution)又称为反卷积(Deconvolution) 先看下普通的卷积过程: 如下图: 这是一个卷积核大小为3x3,...
  • 对困扰亚像素图像块匹配方法的三个重要因素:搜索区域大小、模板图像大小、亚像素拟合精度进行详细分析和试验,提出根据试验结果和微纳米图像序列的测量特点选择最佳的搜索区域、模板大小、匹配准则函数和亚像素拟合...
  • 提出一种微小型零件亚像素级边缘检测算法:采用非正交二次B样条小波变换得到微小型零件的像素级边缘,利用Zernike矩算法的矩不变性对像素级边缘进行亚像素级精确定位,给出了算法原理,分析了像素级和亚像素级的边缘...
  • 在深入分析二维高斯分布公式的基础上,通过将光斑中心整像素坐标和亚像素坐标进行分离,推导出一种无需求解广义逆矩阵的高斯曲面解析算法,该方法综合利用窗口内的所有像素灰度信息,通过解析表达式直接计算高斯分布...
  • matlab开发-LucasKanadepyramidalRefinedOpticalFlow实现。该文件实现了著名的LK算法,并进行了正则化和亚像素计算。
  • 听记理想的字体其边缘的过渡是非常平滑的,但是...为了解决这个问题,字体渲染引擎采用了一些方法去进行平滑,其中就包括灰阶渲染和亚像素渲染灰阶渲染是通过控制字体轮廓上像素点的亮度,达到字体原始形状的方法亚像素
  • 针对数字散斑相关计算模型, 分析了影响相关系数的因素, 并围绕相关系数计算和亚像素同名点插值精度两方面重点分析了二值随机散斑和灰度随机散斑的三维重建效果。通过设计不同尺寸颗粒的散斑图案和采用不同大小的相关...
  • 3.1 数据结构 在深入研究机器视觉算法之前,我们必须分析机器视觉应用中涉及到的基本数据结构。本节介绍表示图像,区域和亚像素轮廓的数据结构。
  • PixelFormer

    2013-08-12 16:37:33
    通过其可预测性和亚像素精度,你可以轻松地创建专业品质的图标和位图。 主要特性: * 对图像大小无限制 * 最高支持32位带Alpha通道的RGB色彩深度 * 切换色彩深度时损耗极少 * 支持半透明颜色 * 支持自由形状...
  • 对应示例程序: inspect_frame_width.hdev 目标: 根据内外两个轮廓的点向距离,检查手机...1. 读取原始图像,进行阈值分割和亚像素边缘检测       2. 利用算子union_adjacent_contou...
  •  相比于MSAA,FXAA的目标是速度更快、显存占用更低,还有着不会造成镜面模糊和亚像素模糊(表面渲染不足一个像素时的闪烁现象)的优势,而代价就是精度和质量上的损失。 FXAA 3相比于FXAA 1有很明显的性能优势,...
  • 然后通过图像标定和亚像素最小二乘法进行直线拟合获得轴的边缘轨迹,完成轴的直径和同轴度识别。进行视觉识别结果和人工测量结果比较,结果表明,采用机器视觉进行轴类零件识别,相对误差为0.001,检测精度具有一定的可靠...
  • 基于最大似然的频带分配,颜色合成和像素分类,光谱角度映射器(SAM),光谱特征拟合(SFF),线性光谱微分(LSU),山阴影图像和自动线条的光谱和亚像素分类方法使用提取。 通过从区域的1:25,000图中随机选择控制...
  • 文章目录1、参考2、帧间预测技术A、树状结构分块B、运动估计准则C、运动搜索方法D、树状分级搜索和亚像素估计E、B帧的预测F、MV的编码 1、参考 https://blog.csdn.net/sunnymov/article/details/4454424 ...
  • OpenCV绘图和注释

    2018-08-19 20:00:37
    大多数绘图函数都支持操作对象的颜色、宽度、线型和亚像素对齐等参数。 艺术线条 画直线或者其他图形的函数通常可以接受宽度(thickness)和线型(lineType)的参数。这两个参数都是整型的,lineType参数只能是4、...
  • 为了准确地搜索同名点,该方法采用了一种新的时空相关模型和亚像素插值策略。对相关区域大小相关的重建精度和基于模型拟投影的模式数进行了分析,结果表明使用几个(如三个)相关大小合适的散斑模式可以得到...
  • 这项研究的目的是通过对各种植被指数的森林覆盖变化检测和亚像素分类,使用Landsat影像TM,ETM +和OLI来挑选高密度地块,从而对研究区域内的森林砍伐进行评估和量化。 遥感用于突出显示由时空引起的变化。 这种监视...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

像素和亚像素