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

Smoothing a photo 

Applying a box filter with hard edges doesn't result in a smooth blur on the output photo.

To improve this, the filter can be made smoother around the edges. One of the popular such filters is a Gaussian filter. This is a non-linear filter which enhances the effect of the center pixel and gradually reduces the effects as the pixel gets farther from the center. Mathematically, a Gaussian function is given as:

where μ is mean and σ is variance. 

An example kernel matrix for this kind of filter in a two-dimensional discrete domain is given as follows:

This two-dimensional array is used in normalized form and effect of this filter also depends on its width by changing the kernel width has varying effects on the output as discussed in further section. Applying Gaussian kernel as filter removes high-frequency components which results in removing strong edges and hence a blurred photo:

While this filter performs better blurring than a box filter, the implementation is also quite simple with OpenCV:

def plot_cv_img(input_image, output_image): 
"""
Converts an image from BGR to RGB and plots
"""
fig, ax = plt.subplots(nrows=1, ncols=2)

ax[0].imshow(cv2.cvtColor(input_image, cv2.COLOR_BGR2RGB))
ax[0].set_title('Input Image')
ax[0].axis('off')

ax[1].imshow(cv2.cvtColor(output_image, cv2.COLOR_BGR2RGB))
ax[1].set_title('Gaussian Blurred')
ax[1].axis('off')
plt.show()


def main():
# read an image
img = cv2.imread('../figures/flower.png')

# apply gaussian blur,

# kernel of size 5x5,
# change here for other sizes
kernel_size = (5,5)
# sigma values are same in both direction
blur = cv2.GaussianBlur(img,(5,5),0)

plot_cv_img(img, blur)

if __name__ == '__main__':
main()
主站蜘蛛池模板: 卓资县| 南陵县| 洛宁县| 崇州市| 沛县| 宾川县| 任丘市| 康保县| 阿鲁科尔沁旗| 蓬溪县| 辽宁省| 桦甸市| 辽源市| 台湾省| 嘉峪关市| 英德市| 吉水县| 农安县| 两当县| 婺源县| 正镶白旗| 安顺市| 宽城| 隆德县| 巴彦淖尔市| 连云港市| 临夏县| 合水县| 呼伦贝尔市| 合川市| 上高县| 长岭县| 三台县| 奈曼旗| 镇康县| 宝清县| 靖远县| 南溪县| 承德县| 襄樊市| 伊吾县|