精华内容
下载资源
问答
  • 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
    srcInput single-channel 8-bit or floating-point image.
    dstImage to store the Harris detector responses. It has the type CV_32FC1 and the same size as src .
    blockSizeNeighborhood size (see the details on cornerEigenValsAndVecs ).
    ksizeAperture parameter for the Sobel operator.
    kHarris detector free parameter. See the formula below.
    borderTypePixel 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
    imageInput 8-bit or floating-point 32-bit, single-channel image.
    cornersOutput vector of detected corners.
    maxCornersMaximum 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.
    qualityLevelParameter 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.
    minDistanceMinimum possible Euclidean distance between the returned corners.
    maskOptional 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.
    blockSizeSize of an average block for computing a derivative covariation matrix over each pixel neighborhood. See cornerEigenValsAndVecs .
    useHarrisDetectorParameter indicating whether to use a Harris detector (see cornerHarris) or cornerMinEigenVal.
    kFree 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-07-10 15:32:44
    像素是成像面的基本单位也是最小单位,通常被称为图像的物理分辨率。 亚像素是软件上对物理分辨率的近似优化结果。 例如:某CMOS成像芯片,其像素间距为4.5um。在成像时,对物理世界中连续的图像进行了离散化处理...
  • 该算法也已在 CUDA 语言中实现,用于并行执行,允许执行实时光流。 有关更多详细信息,请参阅 CUDA 区。
  • 用一张棋盘格来进行图像的像素精度计算,其计算程序是:   #include"opencv2/opencv.hpp" using namespace cv; int main() { Mat srcimg = imread("6.bmp"); Mat gray; cvtColor(srcimg,...
  • 像素卷积和转置卷积

    千次阅读 2019-05-20 15:27:14
    CNN中对特征图进行上采样常用的操作有转置卷积和亚像素卷积 1、转置卷积 转置卷积(Transposed Convolution)又称为反卷积(Deconvolution) 先看下普通的卷积过程: 如下图: 这是一个卷积核大小为3x3,...
  • 目录 1.1 亚像素理解 ...例如两个感官原件上的像素之间有4.5um的间距,宏观上它们是连在一起的,微观上它们之间还有无数微小的东西存在,这些存在于两个实际物理像素之间的像素,就被称为“亚像素”。 亚像素
  • 像素1.1 亚像素1.2 亚像素的精度2. 超像素2.2 超像素判别条件2.3 超像素生成算法 1. 亚像素 1.1 亚像素像素,英文subpixel 在相机成像的过程中,获得的图像数据是将图像进行了离散化的处理,由于感光元件本身...
  • 什么是子像素像素是区域阵列相机图像平面的最小单位。例如,CMOS相机芯片的像素间距为5.2微米。在相机拍照时,物理世界中的连续图像被离散化了。成像平面上的每个像素只代表它附近的颜色。"近 "到什么程度?很难...
  • 近段时间需要用到亚像素卷积的知识,因此上网查阅了论文和资料,此文是根据网上的博文以及相关论文,依据个人的理解整理而来。 总而言之,拾人牙慧而已。 Content1 亚像素的定义1.1 亚像素理解1.2 何谓亚像素?...
  • 图像处理之角点检测与亚像素角点定位 角点是图像中亮度变化最强地方反映了图像的本质特征,提取图像中的角点可以有效提高图像处理速度与精准度。所以对于整张图像来说特别重要,角点检测与提取的越准确图像处理与...
  • 像素定义Pixel is the technical definition of a dot in a digital image, graphic or screen. Pixel is the atom of the digital image, graphic or screen where it can not be divided. Pixel is used for ...
  • 在分析现有棋盘格角点像素级和亚像素级定位方法不足的基础上,提出了一种基于改进SV方法的棋盘格角点亚像素定位方法。首先,采用SV算子对角点进行像素级检测;其次,选取标定图像中以初定位角点坐标为中心的5×5像素...
  • 像素算法

    万次阅读 2018-09-13 17:57:11
    在这篇博客里,主要讲解两点:点定位(Point localization)以及边缘定位(Edge localization),均是亚像素级定位精度。当然还有其他定位方法,这里仅针对亮点和边缘两种情形分别进行精确定位。   1. 为何需要进行亚...
  • 像素精度轮廓

    2021-04-10 22:25:18
      我们平常大多数时候讨论的数据结构都是像素精度的,通常,因为某些应用中需要达到比图像像素分辨率更高的精度,因此从图像中提取亚像素精度数据是很重要的。亚像素数据可以通过亚像素预置分割或亚像素边缘提取...
  • Halcon中亚像素的概念

    2020-03-22 11:56:39
    像素像素之间的最小距离就是像素的宽度,但是在世界的工程应用中,像素级别的在有些场合还不能够满足要求,所以就需要有一个比像素宽度按更小的精度,这就是亚像素精度,用于提高分辨率。 Halcon中,使用XLD...
  • 像素与halcon

    万次阅读 2017-02-14 13:29:49
    朋友发来两个小项目,要求亚像素精度。突然想问几个问题:1、何为亚像素?2、何为亚像素精度?3、使用亚像素测量,系统应注意什么? 1、何谓亚像素? 面阵摄像机的成像面以像素为最小单位。例如某CMOS摄像芯片,其...
  • 利用亚像素卷积生成对抗网络学习图像压缩感知
  • 对困扰亚像素图像块匹配方法的三个重要因素:搜索区域大小、模板图像大小、亚像素拟合精度进行详细分析和试验,提出根据试验结果和微纳米图像序列的测量特点选择最佳的搜索区域、模板大小、匹配准则函数和亚像素拟合...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 377
精华内容 150
关键字:

像素和亚像素