官术网_书友最值得收藏!

2D linear filters

While the preceding filter is a point-based filter, image pixels have information around the pixel as well. In the previous image of the flower, the pixel values in the petal are all yellow. If we choose a pixel of the petal and move around, the values will be quite close. This gives some more information about the image. To extract this information in filtering, there are several neighborhood filters. 

In neighborhood filters, there is a kernel matrix which captures local region information around a pixel. To explain these filters, let's start with an input image, as follows:

This is a simple binary image of the number 2. To get certain information from this image, we can directly use all the pixel values. But instead, to simplify, we can apply filters on this. We define a matrix smaller than the given image which operates in the neighborhood of a target pixel. This matrix is termed kernel; an example is given as follows:

The operation is defined first by superimposing the kernel matrix on the original image, then taking the product of the corresponding pixels and returning a summation of all the products. In the following figure, the lower 3 x 3 area in the original image is superimposed with the given kernel matrix and the corresponding pixel values from the kernel and image are multiplied. The resulting image is shown on the right and is the summation of all the previous pixel products: 

This operation is repeated by sliding the kernel along image rows and then image columns. This can be implemented as in following code. We will see the effects of applying this on an image in coming sections: 

# design a kernel matrix, here is uniform 5x5
kernel = np.ones((5,5),np.float32)/25

# apply on the input image, here grayscale input
dst = cv2.filter2D(gray,-1,kernel)

However, as you can see previously, the corner pixel will have a drastic impact and results in a smaller image because the kernel, while overlapping, will be outside the image region. This causes a black region, or holes, along with the boundary of an image. To rectify this, there are some common techniques used:

  • Padding the corners with constant values maybe 0 or 255, by default OpenCV will use this.
  • Mirroring the pixel along the edge to the external area 
  • Creating a pattern of pixels around the image

The choice of these will depend on the task at hand. In common cases, padding will be able to generate satisfactory results. 

The effect of the kernel is most crucial as changing these values changes the output significantly. We will first see simple kernel-based filters and also see their effects on the output when changing the size. 

主站蜘蛛池模板: 连州市| 多伦县| 新源县| 重庆市| 山东省| 南郑县| 荃湾区| 广南县| 孟州市| 武冈市| 卢氏县| 松溪县| 遂宁市| 河池市| 日照市| 崇明县| 玉屏| 株洲县| 株洲市| 古田县| 兴国县| 丽江市| 盘山县| 广德县| 白银市| 溧水县| 泽州县| 海兴县| 民权县| 阿尔山市| 遂溪县| 邵东县| 孝感市| 大冶市| 鹿泉市| 望都县| 铁岭市| 仲巴县| 米脂县| 监利县| 盐山县|