Image Processing: Algorithm Improvement for Real-Time FedEx Logo Detector

后端 未结 2 1516
半阙折子戏
半阙折子戏 2021-02-02 12:16

I\'ve been working on a project involving image processing for logo detection. Specifically, the goal is to develop an automated system for a real-time FedEx truck/logo detector

2条回答
  •  庸人自扰
    2021-02-02 12:58

    You can help the detector with preprocessing the image, then you don't need as many training images.

    First we reduce the barrel distortion.

    import cv2
    img = cv2.imread('fedex.jpg')
    margin = 150
    # add border as the undistorted image is going to be larger
    img = cv2.copyMakeBorder(
                     img, 
                     margin, 
                     margin, 
                     margin, 
                     margin, 
                     cv2.BORDER_CONSTANT, 
                     0)
    import numpy as np
    
    width  = img.shape[1]
    height = img.shape[0]
    distCoeff = np.zeros((4,1), np.float64)
    
    k1 = -4.5e-5;
    k2 = 0.0;
    p1 = 0.0;
    p2 = 0.0;
    
    distCoeff[0,0] = k1;
    distCoeff[1,0] = k2;
    distCoeff[2,0] = p1;
    distCoeff[3,0] = p2;
    
    cam = np.eye(3, dtype=np.float32)
    
    cam[0,2] = width/2.0  # define center x
    cam[1,2] = height/2.0 # define center y
    cam[0,0] = 12.        # define focal length x
    cam[1,1] = 12.        # define focal length y
    
    dst = cv2.undistort(img, cam, distCoeff)
    

    Then we transform the image in a way as if the camera is facing the FedEx truck right on. That is wherever along the curb the truck is parked, the FedEx logo will have almost the same size and orientation.

    # use four points for homography estimation, coordinated taken from undistorted image
    # 1. top-left corner of F
    # 2. bottom-left corner of F
    # 3. top-right of E
    # 4. bottom-right of E
    pts_src = np.array([[1083, 235], [1069, 343], [1238, 301],[1201, 454]])
    pts_dst = np.array([[1069, 235],[1069, 320],[1201, 235],[1201, 320]])
    h, status = cv2.findHomography(pts_src, pts_dst)
    im_out = cv2.warpPerspective(dst, h, (dst.shape[1], dst.shape[0]))
    

提交回复
热议问题