├── requirements.txt ├── .gitignore ├── Image_Generated ├── DIY.jpg ├── Naive.jpg ├── Embossing_.jpg ├── Gaussian_Blur.jpg ├── Motion_Blur.jpg ├── Averaging_Blur.jpg ├── Completed_Blur.jpg ├── Sharpness_Edge.jpg ├── Sharpness_Center.jpg ├── Embossing_45_degree.jpg ├── Embossing_Asymmetric.jpg ├── Averaging_Blur_Enhanced.jpg ├── Edge_Detection_360_degree.jpg └── Edge_Detection_45_degree.jpg ├── Image_Origin └── girl.jpg ├── LICENSE.md ├── src ├── run.sh ├── convolution.py ├── main.py └── filter.py └── README.md /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy>=1.11.1 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Generated by IDE 3 | .idea/ 4 | src/__pycache__/ 5 | -------------------------------------------------------------------------------- /Image_Generated/DIY.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/DIY.jpg -------------------------------------------------------------------------------- /Image_Origin/girl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Origin/girl.jpg -------------------------------------------------------------------------------- /Image_Generated/Naive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Naive.jpg -------------------------------------------------------------------------------- /Image_Generated/Embossing_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Embossing_.jpg -------------------------------------------------------------------------------- /Image_Generated/Gaussian_Blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Gaussian_Blur.jpg -------------------------------------------------------------------------------- /Image_Generated/Motion_Blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Motion_Blur.jpg -------------------------------------------------------------------------------- /Image_Generated/Averaging_Blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Averaging_Blur.jpg -------------------------------------------------------------------------------- /Image_Generated/Completed_Blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Completed_Blur.jpg -------------------------------------------------------------------------------- /Image_Generated/Sharpness_Edge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Sharpness_Edge.jpg -------------------------------------------------------------------------------- /Image_Generated/Sharpness_Center.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Sharpness_Center.jpg -------------------------------------------------------------------------------- /Image_Generated/Embossing_45_degree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Embossing_45_degree.jpg -------------------------------------------------------------------------------- /Image_Generated/Embossing_Asymmetric.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Embossing_Asymmetric.jpg -------------------------------------------------------------------------------- /Image_Generated/Averaging_Blur_Enhanced.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Averaging_Blur_Enhanced.jpg -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 https://github.com/JNingWei/Image_Filter 4 | 5 | For open source sharing. 6 | -------------------------------------------------------------------------------- /src/run.sh: -------------------------------------------------------------------------------- 1 | 2 | echo -e '\n\n == == Filterring Image == ==\n' 3 | python main.py 4 | 5 | find . -name "*.pyc" -type f -delete 6 | 7 | 8 | -------------------------------------------------------------------------------- /Image_Generated/Edge_Detection_360_degree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Edge_Detection_360_degree.jpg -------------------------------------------------------------------------------- /Image_Generated/Edge_Detection_45_degree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JNingWei/Image_Filter/HEAD/Image_Generated/Edge_Detection_45_degree.jpg -------------------------------------------------------------------------------- /src/convolution.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | """ 4 | Image-Filter 5 | Convolution module. 6 | 7 | __author__ = 'JNingWei' 8 | """ 9 | 10 | import numpy as np 11 | 12 | def conv(image, filter, image_center_x, image_center_y): 13 | size = 3 14 | radius = int((size-1)/2) 15 | view = np.zeros((size, size, 3), dtype=np.float) 16 | for i in range(size): 17 | for j in range(size): 18 | for z in range(3): 19 | view[i][j][z] = image[image_center_x-radius+i][image_center_y-radius+j][z] * filter[i][j][z] 20 | return np.sum(view) 21 | -------------------------------------------------------------------------------- /src/main.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | """ 4 | Image-Filter 5 | Main program. 6 | 7 | __author__ = 'JNingWei' 8 | """ 9 | 10 | import os 11 | import cv2 12 | import numpy as np 13 | 14 | import filter 15 | import convolution 16 | 17 | def main(src, dst): 18 | 19 | src_pic_paths = [os.path.join(src, name) for name in os.listdir(src) 20 | if os.path.splitext(name)[-1] in [".jpg", ".JPG", ".png", ".PNG"]] 21 | filters = [ 22 | 'Naive', # Naive Filter 原图滤波(相当于无变化) 23 | 'Sharpness_Center', # Sharpness_Center Filter 中心锐化 滤波 24 | 'Sharpness_Edge', # Sharpness_Edge Filter 边缘锐化 滤波 25 | 'Edge_Detection_360_degree', # Edge_Detection_360° Filter 360°边缘检测 滤波 26 | 'Edge_Detection_45_degree', # Edge_Detection_45° Filter 45°边缘检测 滤波 27 | 'Embossing_45_degree', # Embossing_45° Filter 45°浮雕 滤波 28 | 'Embossing_Asymmetric', # Embossing_Asymmetric Filter 非对称浮雕 滤波 29 | 'Averaging_Blur', # Averaging_Blur Filter 均值模糊 滤波 30 | 'Completed_Blur', # Completed_Blur Filter 完全模糊 滤波 31 | 'Motion_Blur', # Motion_Blur Filter 运动模糊 滤波 32 | 'Gaussian_Blur', # Gaussian_Blur Filter 高斯模糊 滤波 33 | 34 | 'DIY' # DIY Filter 自定义 滤波 35 | ] 36 | 37 | # =================================================================== 38 | ## Choose the filter from list: "filter_names" 选择你需要的滤波器 39 | 40 | filter_name = 'Sharpness_Center' 41 | # filter_name = 'DIY' 42 | # =================================================================== 43 | 44 | for src_pic_path in src_pic_paths: 45 | img = cv2.imread(src_pic_path) 46 | h, w, c = img.shape 47 | assert c == 3, "Error! Please use the picture of 3 color channels." 48 | filter_0, filter_1, filter_2 = filter.Filter(filter_name) 49 | img2 = np.zeros((h, w, c), dtype=np.float) 50 | for i in range(1, h-1, 1): 51 | for j in range(1, w-1, 1): 52 | img2[i][j][0] = convolution.conv(img, filter_0, i, j) 53 | img2[i][j][1] = convolution.conv(img, filter_1, i, j) 54 | img2[i][j][2] = convolution.conv(img, filter_2, i, j) 55 | dst_pic_name = filter_name + '.jpg' 56 | dst_pic_path = os.path.join(dst, dst_pic_name) 57 | cv2.imwrite(dst_pic_path, img2) 58 | 59 | img3 = cv2.imread(dst_pic_path) 60 | cv2.imshow(dst_pic_name, img3) 61 | cv2.waitKey(0) 62 | cv2.destroyAllWindows() 63 | 64 | 65 | if __name__ == "__main__": 66 | SRC = '../Image_Origin' # dir for origin pics 原图像文件夹 67 | DST = '../Image_Generated' # dir for filtered pics 滤波后生成图像存放的文件夹 68 | main(SRC, DST) 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Image Filter ![Travis](https://img.shields.io/travis/rust-lang/rust/master.svg) ![Language](https://img.shields.io/badge/language-Python-orange.svg) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) ![AD](https://img.shields.io/badge/东半球最好的-图像滤波器-pink.svg) 2 | 3 | __Update 13-05-2017__: __It's an image filter entirely written by myself.__ 4 | 5 | MIT license. Contributions welcome. 6 | 7 | ## Overview 8 | 9 | Image-Filter/      root directory 10 | | 11 | +-- src/ code files that implement the function 12 | | 13 | +-- Image_Origin/ images which be chosen to filtering 14 | | 15 | +-- Image_Generated/ images which be generated after filtering 16 | | 17 | +-- README.md manual of project 18 | | 19 |     +-- LICENSE.md       license of project 20 | | 21 | +-- requirements.txt environment required for this program 22 | 23 | There are 11 filters can choose: 24 | 25 | - [x] 1. Naive Filter           原图滤波(相当于无变化) 26 | - [x] 2. Sharpness_Center Filter      中心锐化 滤波 27 | - [x] 3. Sharpness_Edge Filter      边缘锐化 滤波 28 | - [x] 4. Edge_Detection_360° Filter    360°边缘检测 滤波 29 | - [x] 5. Edge_Detection_45° Filter     45°边缘检测 滤波 30 | - [x] 6. Embossing_45° Filter      45°浮雕 滤波 31 | - [x] 7. Embossing_Asymmetric Filter   非对称浮雕 滤波 32 | - [x] 8. Averaging_Blur Filter        均值模糊 滤波 33 | - [x] 9. Completed_Blur Filter       完全模糊 滤波 34 | - [x] 10. Motion_Blur Filter         运动模糊 滤波 35 | - [x] 11. Gaussian_Blur Filter       高斯模糊 滤波 36 | 37 | Choose the filter you need, and the filtered image will generated at folder ```Image_Generated/```.
38 | 选择你需要的滤波器,卷积结果会自动保存在 ```Image_Generated/``` 文件夹。 39 | 40 | ## Usage 41 | 42 | 1. Run ```python src/main.py``` to generated the image you need. Need to wait patiently for a while to get results. 43 | 2. In ```src/main.py```, you can also design a filter yourself to experiment. 44 |
45 | 46 | 1. 运行 ```python src / main.py``` 来生成你需要的图像,卷积结果需要耐心等待一会儿。 47 | 2. 在 ```src/main.py``` 中,自己还可以设计一个滤波器来做实验以加深对滤波器的了解。 48 | 49 | ## Requirements 50 | 51 | * Python 52 | 53 | * OpenCV 54 | 55 | ## Demo 56 | 57 | 58 | 59 | 1. Naive Filter    原图滤波(相当于无变化)
60 | ![Naive](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Naive.jpg) 61 | 62 | 63 | 2. Sharpness_Center Filter    中心锐化 滤波
64 | ![Sharpness_Center](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Sharpness_Center.jpg) 65 | 66 | 3. Sharpness_Edge Filter    边缘锐化 滤波
67 | ![Sharpness_Edge](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Sharpness_Edge.jpg) 68 | 69 | 4. Edge_Detection_360° Filter    360°边缘检测 滤波
70 | ![Edge_Detection_360_degree](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Edge_Detection_360_degree.jpg) 71 | 72 | 5. Edge_Detection_45° Filter    45°边缘检测 滤波
73 | ![Edge_Detection_45_degree](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Edge_Detection_45_degree.jpg) 74 | 75 | 6. Embossing_45° Filter    45°浮雕 滤波
76 | ![Embossing_45_degree](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Embossing_45_degree.jpg) 77 | 78 | 7. Embossing_Asymmetric Filter    非对称浮雕 滤波
79 | ![Embossing_Asymmetric](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Embossing_Asymmetric.jpg) 80 | 81 | 8. Averaging_Blur Filter    均值模糊 滤波
82 | ![Averaging_Blur](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Averaging_Blur.jpg) 83 | 84 | 9. Completed_Blur Filter    完全模糊 滤波
85 | ![Completed_Blur](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Completed_Blur.jpg) 86 | 87 | 10. Motion_Blur Filter    运动模糊 滤波
88 | ![Motion_Blur](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Motion_Blur.jpg) 89 | 90 | 11. Gaussian_Blur Filter    高斯模糊 滤波
91 | ![Gaussian_Blur](https://github.com/JNingWei/Image-Filter/blob/master/Image_Generated/Gaussian_Blur.jpg) 92 | 93 | ## License 94 | 95 | [MIT](https://github.com/JNingWei/Image_Filter/blob/master/LICENSE.md) 96 | -------------------------------------------------------------------------------- /src/filter.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | """ 4 | Image-Filter 5 | Provide optional filter. 6 | 7 | __author__ = 'JNingWei' 8 | """ 9 | 10 | import numpy as np 11 | 12 | def Naive_Filter(): 13 | # Naive Filter 原图 滤波 14 | filter_0 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 15 | [[0,0,0],[1,0,0],[0,0,0]], 16 | [[0,0,0],[0,0,0],[0,0,0]]], 17 | dtype=np.int16) 18 | filter_1 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 19 | [[0,0,0],[0,1,0],[0,0,0]], 20 | [[0,0,0],[0,0,0],[0,0,0]]], 21 | dtype=np.int16) 22 | filter_2 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 23 | [[0,0,0],[0,0,1],[0,0,0]], 24 | [[0,0,0],[0,0,0],[0,0,0]]], 25 | dtype=np.int16) 26 | return filter_0, filter_1, filter_2 27 | 28 | def Sharpness_Center_Filter(): 29 | # Sharpness_Center Filter 中心锐化 滤波 30 | filter_0 = np.array([[[-1,0,0],[-1,0,0],[-1,0,0]], 31 | [[-1,0,0],[9,0,0],[-1,0,0]], 32 | [[-1,0,0],[-1,0,0],[-1,0,0]]], 33 | dtype=np.int16) 34 | filter_1 = np.array([[[0,-1,0],[0,-1,0],[0,-1,0]], 35 | [[0,-1,0],[0,9,0],[0,-1,0]], 36 | [[0,-1,0],[0,-1,0],[0,-1,0]]], 37 | dtype=np.int16) 38 | filter_2 = np.array([[[0,0,-1],[0,0,-1],[0,0,-1]], 39 | [[0,0,-1],[0,0,9],[0,0,-1]], 40 | [[0,0,-1],[0,0,-1],[0,0,-1]]], 41 | dtype=np.int16) 42 | return filter_0, filter_1, filter_2 43 | 44 | def Sharpness_Edge_Filter(): 45 | # Sharpness_Edge Filter 边缘锐化 滤波 46 | filter_0 = np.array([[[1,0,0],[1,0,0],[1,0,0]], 47 | [[1,0,0],[-7,0,0],[1,0,0]], 48 | [[1,0,0],[1,0,0],[1,0,0]]], 49 | dtype=np.int16) 50 | filter_1 = np.array([[[0,1,0],[0,1,0],[0,1,0]], 51 | [[0,1,0],[0,-7,0],[0,1,0]], 52 | [[0,1,0],[0,1,0],[0,1,0]]], 53 | dtype=np.int16) 54 | filter_2 = np.array([[[0,0,1],[0,0,1],[0,0,1]], 55 | [[0,0,1],[0,0,-7],[0,0,1]], 56 | [[0,0,1],[0,0,1],[0,0,1]]], 57 | dtype=np.int16) 58 | return filter_0, filter_1, filter_2 59 | 60 | def Edge_Detection_360_degree_Filter(): 61 | # Edge_Detection_360° Filter 360°边缘检测 滤波 62 | filter_0 = np.array([[[-1,0,0],[-1,0,0],[-1,0,0]], 63 | [[-1,0,0],[8,0,0],[-1,0,0]], 64 | [[-1,0,0],[-1,0,0],[-1,0,0]]], 65 | dtype=np.int16) 66 | filter_1 = np.array([[[0,-1,0],[0,-1,0],[0,-1,0]], 67 | [[0,-1,0],[0,8,0],[0,-1,0]], 68 | [[0,-1,0],[0,-1,0],[0,-1,0]]], 69 | dtype=np.int16) 70 | filter_2 = np.array([[[0,0,-1],[0,0,-1],[0,0,-1]], 71 | [[0,0,-1],[0,0,8],[0,0,-1]], 72 | [[0,0,-1],[0,0,-1],[0,0,-1]]], 73 | dtype=np.int16) 74 | return filter_0, filter_1, filter_2 75 | 76 | def Edge_Detection_45_degree_Filter(): 77 | # Edge_Detection_45° Filter 45°边缘检测 滤波 78 | filter_0 = np.array([[[-1,0,0],[0,0,0],[0,0,0]], 79 | [[0,0,0],[2,0,0],[0,0,0]], 80 | [[0,0,0],[0,0,0],[-1,0,0]]], 81 | dtype=np.int16) 82 | filter_1 = np.array([[[0,-1,0],[0,0,0],[0,0,0]], 83 | [[0,0,0],[0,2,0],[0,0,0]], 84 | [[0,0,0],[0,0,0],[0,-1,0]]], 85 | dtype=np.int16) 86 | filter_2 = np.array([[[0,0,-1],[0,0,0],[0,0,0]], 87 | [[0,0,0],[0,0,2],[0,0,0]], 88 | [[0,0,0],[0,0,0],[0,0,-1]]], 89 | dtype=np.int16) 90 | return filter_0, filter_1, filter_2 91 | 92 | def Embossing_45_degree_Filter(): 93 | # Embossing_45° Filter 45°浮雕 滤波 94 | filter_0 = np.array([[[-1,0,0],[-1,0,0],[0,0,0]], 95 | [[-1,0,0],[1,0,0],[1,0,0]], 96 | [[0,0,0],[1,0,0],[1,0,0]]], 97 | dtype=np.int16) 98 | filter_1 = np.array([[[0,-1,0],[0,-1,0],[0,0,0]], 99 | [[0,-1,0],[0,1,0],[0,1,0]], 100 | [[0,0,0],[0,1,0],[0,1,0]]], 101 | dtype=np.int16) 102 | filter_2 = np.array([[[0,0,-1],[0,0,-1],[0,0,0]], 103 | [[0,0,-1],[0,0,1],[0,0,1]], 104 | [[0,0,0],[0,0,1],[0,0,1]]], 105 | dtype=np.int16) 106 | return filter_0, filter_1, filter_2 107 | 108 | def Embossing_Asymmetric_Filter(): 109 | # Embossing_Asymmetric Filter 非对称浮雕 滤波 110 | filter_0 = np.array([[[2,0,0],[0,0,0],[0,0,0]], 111 | [[0,0,0],[-1,0,0],[0,0,0]], 112 | [[0,0,0],[0,0,0],[-1,0,0]]], 113 | dtype=np.int16) 114 | filter_1 = np.array([[[0,2,0],[0,0,0],[0,0,0]], 115 | [[0,0,0],[0,-1,0],[0,0,0]], 116 | [[0,0,0],[0,0,0],[0,-1,0]]], 117 | dtype=np.int16) 118 | filter_2 = np.array([[[0,0,2],[0,0,0],[0,0,0]], 119 | [[0,0,0],[0,0,-1],[0,0,0]], 120 | [[0,0,0],[0,0,0],[0,0,-1]]], 121 | dtype=np.int16) 122 | return filter_0, filter_1, filter_2 123 | 124 | def Averaging_Blur_Filter(): 125 | # Averaging_Blur Filter 均值模糊 滤波 126 | filter_0 = np.array([[[0,0,0],[0.25,0,0],[0,0,0]], 127 | [[0.25,0,0],[0,0,0],[0.25,0,0]], 128 | [[0,0,0],[0.25,0,0],[0,0,0]]], 129 | dtype=np.float) 130 | filter_1 = np.array([[[0,0,0],[0,0.25,0],[0,0,0]], 131 | [[0,0.25,0],[0,0,0],[0,0.25,0]], 132 | [[0,0,0],[0,0.25,0],[0,0,0]]], 133 | dtype=np.float) 134 | filter_2 = np.array([[[0,0,0],[0,0,0.25],[0,0,0]], 135 | [[0,0,0.25],[0,0,0],[0,0,0.25]], 136 | [[0,0,0],[0,0,0.25],[0,0,0]]], 137 | dtype=np.float) 138 | return filter_0, filter_1, filter_2 139 | 140 | def Completed_Blur_Filter(): 141 | # Completed_Blur Filter 完全模糊 滤波 142 | filter_0 = np.array([[[1.0/9,0,0],[1.0/9,0,0],[1.0/9,0,0]], 143 | [[1.0/9,0,0],[1.0/9,0,0],[1.0/9,0,0]], 144 | [[1.0/9,0,0],[1.0/9,0,0],[1.0/9,0,0]]], 145 | dtype=np.float) 146 | filter_1 = np.array([[[0,1.0/9,0],[0,1.0/9,0],[0,1.0/9,0]], 147 | [[0,1.0/9,0],[0,1.0/9,0],[0,1.0/9,0]], 148 | [[0,1.0/9,0],[0,1.0/9,0],[0,1.0/9,0]]], 149 | dtype=np.float) 150 | filter_2 = np.array([[[0,0,1.0/9],[0,0,1.0/9],[0,0,1.0/9]], 151 | [[0,0,1.0/9],[0,0,1.0/9],[0,0,1.0/9]], 152 | [[0,0,1.0/9],[0,0,1.0/9],[0,0,1.0/9]]], 153 | dtype=np.float) 154 | return filter_0, filter_1, filter_2 155 | 156 | def Motion_Blur_Filter(): 157 | # Motion_Blur Filter 运动模糊 滤波 158 | filter_0 = np.array([[[1,0,0],[0,0,0],[0,0,0]], 159 | [[0,0,0],[1,0,0],[0,0,0]], 160 | [[0,0,0],[0,0,0],[1,0,0]]], 161 | dtype=np.int16) 162 | filter_1 = np.array([[[0,1,0],[0,0,0],[0,0,0]], 163 | [[0,0,0],[0,1,0],[0,0,0]], 164 | [[0,0,0],[0,0,0],[0,1,0]]], 165 | dtype=np.int16) 166 | filter_2 = np.array([[[0,0,1],[0,0,0],[0,0,0]], 167 | [[0,0,0],[0,0,1],[0,0,0]], 168 | [[0,0,0],[0,0,0],[0,0,1]]], 169 | dtype=np.int16) 170 | return filter_0, filter_1, filter_2 171 | 172 | def Gaussian_Blur_Filter(): 173 | # Gaussian_Blur Filter 高斯模糊 滤波 174 | filter_0 = np.array([[[1.0/36,0,0],[4.0/36,0,0],[1.0/36,0,0]], 175 | [[4.0/36,0,0],[16.0/36,0,0],[4.0/36,0,0]], 176 | [[1.0/36,0,0],[4.0/36,0,0],[1.0/36,0,0]]], 177 | dtype=np.float) 178 | filter_1 = np.array([[[0,1.0/36,0],[0,4.0/36,0],[0,1.0/36,0]], 179 | [[0,4.0/36,0],[0,16.0/36,0],[0,4.0/36,0]], 180 | [[0,1.0/36,0],[0,4.0/36,0],[0,1.0/36,0]]], 181 | dtype=np.float) 182 | filter_2 = np.array([[[0,0,1.0/36],[0,0,4.0/36],[0,0,1.0/36]], 183 | [[0,0,4.0/36],[0,0,16.0/36],[0,0,4.0/36]], 184 | [[0,0,1.0/36],[0,0,4.0/36],[0,0,1.0/36]]], 185 | dtype=np.float) 186 | return filter_0, filter_1, filter_2 187 | 188 | def DIY_Filter(): 189 | # Design a filter yourself 自己设计一个滤波器 190 | filter_0 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 191 | [[0,0,0],[1,0,0],[0,0,0]], 192 | [[0,0,0],[0,0,0],[0,0,0]]], 193 | dtype=np.int16) 194 | filter_1 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 195 | [[0,0,0],[0,1,0],[0,0,0]], 196 | [[0,0,0],[0,0,0],[0,0,0]]], 197 | dtype=np.int16) 198 | filter_2 = np.array([[[0,0,0],[0,0,0],[0,0,0]], 199 | [[0,0,0],[0,0,1],[0,0,0]], 200 | [[0,0,0],[0,0,0],[0,0,0]]], 201 | dtype=np.int16) 202 | return filter_0, filter_1, filter_2 203 | 204 | def No_Exist_Filter(): 205 | # When filter name doesn't exist 当滤波器不存在时 206 | filter_0 = np.zeros((3, 3, 3), dtype=np.float) 207 | filter_1 = np.zeros((3, 3, 3), dtype=np.float) 208 | filter_2 = np.zeros((3, 3, 3), dtype=np.float) 209 | return filter_0, filter_1, filter_2 210 | 211 | def Filter(filter_name): 212 | # Choose which filter to be returned 根据用户指定的 滤波器名称,挑选对应的 滤波器配置 返回 213 | if filter_name == 'Naive': 214 | filter_0, filter_1, filter_2 = Naive_Filter() 215 | elif filter_name == 'Sharpness_Center': 216 | filter_0, filter_1, filter_2 = Sharpness_Center_Filter() 217 | elif filter_name == 'Sharpness_Edge': 218 | filter_0, filter_1, filter_2 = Sharpness_Edge_Filter() 219 | elif filter_name == 'Edge_Detection_360_degree': 220 | filter_0, filter_1, filter_2 = Edge_Detection_360_degree_Filter() 221 | elif filter_name == 'Edge_Detection_45_degree': 222 | filter_0, filter_1, filter_2 = Edge_Detection_45_degree_Filter() 223 | elif filter_name == 'Embossing_45_degree': 224 | filter_0, filter_1, filter_2 = Embossing_45_degree_Filter() 225 | elif filter_name == 'Embossing_Asymmetric': 226 | filter_0, filter_1, filter_2 = Embossing_Asymmetric_Filter() 227 | elif filter_name == 'Averaging_Blur': 228 | filter_0, filter_1, filter_2 = Averaging_Blur_Filter() 229 | elif filter_name == 'Completed_Blur': 230 | filter_0, filter_1, filter_2 = Completed_Blur_Filter() 231 | elif filter_name == 'Motion_Blur': 232 | filter_0, filter_1, filter_2 = Motion_Blur_Filter() 233 | elif filter_name == 'Gaussian_Blur': 234 | filter_0, filter_1, filter_2 = Gaussian_Blur_Filter() 235 | elif filter_name == 'DIY': 236 | filter_0, filter_1, filter_2 = DIY_Filter() 237 | else: 238 | print("\n No such Filter !") 239 | exit(0) 240 | filter_0, filter_1, filter_2 = No_Exist_Filter() 241 | 242 | return filter_0, filter_1, filter_2 243 | 244 | --------------------------------------------------------------------------------