김영곤

코드 제출용 포함

This file is too large to display.
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 1 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 1
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 +
53 + img = cv2.imread(j, 1)
54 + b, g, r = cv2.split(img)
55 + img = cv2.merge([r, g, b])
56 + img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + f = np.fft.fft2(img)
59 + fshift = np.fft.fftshift(f)
60 + rows, cols = img.shape
61 + crow, ccol = rows//2, cols//2
62 + d = l
63 + fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + f_ishift = np.fft.ifftshift(fshift)
65 + img_back = np.fft.ifft2(f_ishift)
66 + img_back = np.abs(img_back)
67 +
68 + cv2.imwrite(new_file2, img_back)
69 +
70 +for i in valid_dirList:
71 + print(i)
72 + # filelist에는 "사진 파일들의 리스트"
73 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
74 + filelist = glob(i+'\\*')
75 +
76 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
77 + before_last_path, last = os.path.split(i)
78 + before2_last_path, before_last = os.path.split(before_last_path)
79 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
80 + new_dir = os.path.join(before_last, last)
81 + new_dir = os.path.join(SAVEPATH, new_dir)
82 + print(new_dir)
83 + os.makedirs(new_dir, exist_ok=True)
84 +
85 + for j in filelist:
86 + img = im.open(j)
87 + new_file = new_dir+'\\'+os.path.basename(j)
88 + img.save(new_file)
89 +
90 +for i in test_dirList:
91 + print(i)
92 + # filelist에는 "사진 파일들의 리스트"
93 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
94 + filelist = glob(i+'\\*')
95 +
96 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
97 + before_last_path, last = os.path.split(i)
98 + before2_last_path, before_last = os.path.split(before_last_path)
99 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
100 + new_dir = os.path.join(before_last, last)
101 + new_dir = os.path.join(SAVEPATH, new_dir)
102 + print(new_dir)
103 + os.makedirs(new_dir, exist_ok=True)
104 +
105 + for j in filelist:
106 + img = im.open(j)
107 + new_file = new_dir+'\\'+os.path.basename(j)
108 + img.save(new_file)
109 +
110 +
111 +def printMatrix(a):
112 + m = len(a)
113 + n = len(a[0])
114 + for i in range(m):
115 + for j in range(n):
116 + print('{:6.2f}'.format(a[i][j]), end=' ')
117 + print()
118 + print()
119 +
120 +
121 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
122 +# colab에서는 openCV의 imshow 돌아가지 않는다.
123 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
124 +# img = cv2.imread('cifar10-train-29.png', 1)
125 +# image_pil = im.open('n04461696_3346.png')
126 +# # image_pil.show()
127 +# img1 = np.array(image_pil)
128 +# print(img1.shape)
129 +img = cv2.imread('cifar10-train-29.png', 1)
130 +
131 +
132 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
133 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
134 +print(img0.shape)
135 +# plt.subplot(211), plt.imshow(img0)
136 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
137 +
138 +# plt.subplot(212), plt.imshow(image_pil)
139 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
140 +# plt.show()
141 +
142 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
143 +img2 = img1
144 +i = 0
145 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
146 +
147 +# Fourier Transform을 적용.
148 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
149 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
150 +
151 +for img in img1:
152 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
153 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
154 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
155 + fshift = np.fft.fftshift(f)
156 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
157 +
158 + print(img.shape, fshift.shape)
159 + rows, cols = img.shape
160 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
161 +
162 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
163 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
164 + d = 1
165 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
166 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
167 +
168 + # 푸리에 변환결과를 다시 이미지로 변환
169 + f_ishift = np.fft.ifftshift(fshift)
170 + img_back = np.fft.ifft2(f_ishift)
171 + img_back = np.abs(img_back)
172 + img2[i] = img_back
173 + i += 1
174 + # threshold를 적용하기 위해 float type을 int type으로 변환
175 + img_new = np.uint8(img_back)
176 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
177 + # plt.subplot(231), plt.imshow(img)
178 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
179 +
180 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
181 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
182 +
183 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
184 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
185 +
186 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
187 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
188 +
189 + # plt.subplot(236), plt.imshow(thresh)
190 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
191 + # plt.show()
192 +
193 +img2 = np.transpose(img2, (1, 2, 0))
194 +printMatrix(img2[:, :, 0])
195 +printMatrix(img2[:, :, 1])
196 +printMatrix(img2[:, :, 2])
197 +
198 +plt.subplot(231), plt.imshow(img0)
199 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
200 +
201 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
202 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
203 +
204 +plt.subplot(233), plt.imshow(magnitude_spectrum)
205 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
206 +
207 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
208 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
209 +
210 +print(img2.shape)
211 +plt.subplot(235), plt.imshow(img2)
212 +plt.title('FT'), plt.xticks([]), plt.yticks([])
213 +
214 +# plt.subplot(236), plt.imshow(im.fromarray(
215 +# img0).filter(ImageFilter.FIND_EDGES))
216 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
217 +plt.show()
218 +
219 +
220 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
221 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 255 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 1
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 +
53 + img = cv2.imread(j, 1)
54 + b, g, r = cv2.split(img)
55 + img = cv2.merge([r, g, b])
56 + img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + f = np.fft.fft2(img)
59 + fshift = np.fft.fftshift(f)
60 + rows, cols = img.shape
61 + crow, ccol = rows//2, cols//2
62 + d = l
63 + fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + f_ishift = np.fft.ifftshift(fshift)
65 + img_back = np.fft.ifft2(f_ishift)
66 + img_back = np.abs(img_back)
67 +
68 + cv2.imwrite(new_file2, img_back)
69 +
70 +for i in valid_dirList:
71 + print(i)
72 + # filelist에는 "사진 파일들의 리스트"
73 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
74 + filelist = glob(i+'\\*')
75 +
76 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
77 + before_last_path, last = os.path.split(i)
78 + before2_last_path, before_last = os.path.split(before_last_path)
79 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
80 + new_dir = os.path.join(before_last, last)
81 + new_dir = os.path.join(SAVEPATH, new_dir)
82 + print(new_dir)
83 + os.makedirs(new_dir, exist_ok=True)
84 +
85 + for j in filelist:
86 + img = im.open(j)
87 + new_file = new_dir+'\\'+os.path.basename(j)
88 + img.save(new_file)
89 +
90 +for i in test_dirList:
91 + print(i)
92 + # filelist에는 "사진 파일들의 리스트"
93 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
94 + filelist = glob(i+'\\*')
95 +
96 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
97 + before_last_path, last = os.path.split(i)
98 + before2_last_path, before_last = os.path.split(before_last_path)
99 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
100 + new_dir = os.path.join(before_last, last)
101 + new_dir = os.path.join(SAVEPATH, new_dir)
102 + print(new_dir)
103 + os.makedirs(new_dir, exist_ok=True)
104 +
105 + for j in filelist:
106 + img = im.open(j)
107 + new_file = new_dir+'\\'+os.path.basename(j)
108 + img.save(new_file)
109 +
110 +
111 +def printMatrix(a):
112 + m = len(a)
113 + n = len(a[0])
114 + for i in range(m):
115 + for j in range(n):
116 + print('{:6.2f}'.format(a[i][j]), end=' ')
117 + print()
118 + print()
119 +
120 +
121 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
122 +# colab에서는 openCV의 imshow 돌아가지 않는다.
123 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
124 +# img = cv2.imread('cifar10-train-29.png', 1)
125 +# image_pil = im.open('n04461696_3346.png')
126 +# # image_pil.show()
127 +# img1 = np.array(image_pil)
128 +# print(img1.shape)
129 +img = cv2.imread('cifar10-train-29.png', 1)
130 +
131 +
132 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
133 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
134 +print(img0.shape)
135 +# plt.subplot(211), plt.imshow(img0)
136 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
137 +
138 +# plt.subplot(212), plt.imshow(image_pil)
139 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
140 +# plt.show()
141 +
142 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
143 +img2 = img1
144 +i = 0
145 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
146 +
147 +# Fourier Transform을 적용.
148 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
149 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
150 +
151 +for img in img1:
152 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
153 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
154 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
155 + fshift = np.fft.fftshift(f)
156 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
157 +
158 + print(img.shape, fshift.shape)
159 + rows, cols = img.shape
160 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
161 +
162 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
163 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
164 + d = 1
165 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
166 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
167 +
168 + # 푸리에 변환결과를 다시 이미지로 변환
169 + f_ishift = np.fft.ifftshift(fshift)
170 + img_back = np.fft.ifft2(f_ishift)
171 + img_back = np.abs(img_back)
172 + img2[i] = img_back
173 + i += 1
174 + # threshold를 적용하기 위해 float type을 int type으로 변환
175 + img_new = np.uint8(img_back)
176 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
177 + # plt.subplot(231), plt.imshow(img)
178 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
179 +
180 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
181 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
182 +
183 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
184 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
185 +
186 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
187 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
188 +
189 + # plt.subplot(236), plt.imshow(thresh)
190 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
191 + # plt.show()
192 +
193 +img2 = np.transpose(img2, (1, 2, 0))
194 +printMatrix(img2[:, :, 0])
195 +printMatrix(img2[:, :, 1])
196 +printMatrix(img2[:, :, 2])
197 +
198 +plt.subplot(231), plt.imshow(img0)
199 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
200 +
201 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
202 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
203 +
204 +plt.subplot(233), plt.imshow(magnitude_spectrum)
205 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
206 +
207 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
208 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
209 +
210 +print(img2.shape)
211 +plt.subplot(235), plt.imshow(img2)
212 +plt.title('FT'), plt.xticks([]), plt.yticks([])
213 +
214 +# plt.subplot(236), plt.imshow(im.fromarray(
215 +# img0).filter(ImageFilter.FIND_EDGES))
216 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
217 +plt.show()
218 +
219 +
220 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
221 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 1 # fft한 후 바깥 픽셀 값
30 +l = 15
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 +
53 + img = cv2.imread(j, 1)
54 + b, g, r = cv2.split(img)
55 + img = cv2.merge([r, g, b])
56 + img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + f = np.fft.fft2(img)
59 + fshift = np.fft.fftshift(f)
60 + rows, cols = img.shape
61 + crow, ccol = rows//2, cols//2
62 + d = l
63 + mask = np.zeros((rows, cols), np.uint8)
64 + mask[crow-d:crow+d, ccol-d:ccol+d] = 1
65 + fshift = fshift*mask
66 + f_ishift = np.fft.ifftshift(fshift)
67 + img_back = np.fft.ifft2(f_ishift)
68 + img_back = np.abs(img_back)
69 +
70 + cv2.imwrite(new_file2, img_back)
71 +
72 +for i in valid_dirList:
73 + print(i)
74 + # filelist에는 "사진 파일들의 리스트"
75 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
76 + filelist = glob(i+'\\*')
77 +
78 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
79 + before_last_path, last = os.path.split(i)
80 + before2_last_path, before_last = os.path.split(before_last_path)
81 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
82 + new_dir = os.path.join(before_last, last)
83 + new_dir = os.path.join(SAVEPATH, new_dir)
84 + print(new_dir)
85 + os.makedirs(new_dir, exist_ok=True)
86 +
87 + for j in filelist:
88 + img = im.open(j)
89 + new_file = new_dir+'\\'+os.path.basename(j)
90 + img.save(new_file)
91 +
92 +for i in test_dirList:
93 + print(i)
94 + # filelist에는 "사진 파일들의 리스트"
95 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
96 + filelist = glob(i+'\\*')
97 +
98 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
99 + before_last_path, last = os.path.split(i)
100 + before2_last_path, before_last = os.path.split(before_last_path)
101 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
102 + new_dir = os.path.join(before_last, last)
103 + new_dir = os.path.join(SAVEPATH, new_dir)
104 + print(new_dir)
105 + os.makedirs(new_dir, exist_ok=True)
106 +
107 + for j in filelist:
108 + img = im.open(j)
109 + new_file = new_dir+'\\'+os.path.basename(j)
110 + img.save(new_file)
111 +
112 +
113 +def printMatrix(a):
114 + m = len(a)
115 + n = len(a[0])
116 + for i in range(m):
117 + for j in range(n):
118 + print('{:6.2f}'.format(a[i][j]), end=' ')
119 + print()
120 + print()
121 +
122 +
123 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
124 +# colab에서는 openCV의 imshow 돌아가지 않는다.
125 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
126 +# img = cv2.imread('cifar10-train-29.png', 1)
127 +# image_pil = im.open('n04461696_3346.png')
128 +# # image_pil.show()
129 +# img1 = np.array(image_pil)
130 +# print(img1.shape)
131 +img = cv2.imread('cifar10-train-29.png', 1)
132 +
133 +
134 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
135 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
136 +print(img0.shape)
137 +# plt.subplot(211), plt.imshow(img0)
138 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
139 +
140 +# plt.subplot(212), plt.imshow(image_pil)
141 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
142 +# plt.show()
143 +
144 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
145 +img2 = img1
146 +i = 0
147 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
148 +
149 +# Fourier Transform을 적용.
150 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
151 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
152 +
153 +for img in img1:
154 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
155 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
156 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
157 + fshift = np.fft.fftshift(f)
158 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
159 +
160 + print(img.shape, fshift.shape)
161 + rows, cols = img.shape
162 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
163 +
164 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
165 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
166 + d = 1
167 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
168 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
169 +
170 + # 푸리에 변환결과를 다시 이미지로 변환
171 + f_ishift = np.fft.ifftshift(fshift)
172 + img_back = np.fft.ifft2(f_ishift)
173 + img_back = np.abs(img_back)
174 + img2[i] = img_back
175 + i += 1
176 + # threshold를 적용하기 위해 float type을 int type으로 변환
177 + img_new = np.uint8(img_back)
178 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
179 + # plt.subplot(231), plt.imshow(img)
180 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
181 +
182 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
183 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
184 +
185 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
186 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
187 +
188 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
189 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
190 +
191 + # plt.subplot(236), plt.imshow(thresh)
192 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
193 + # plt.show()
194 +
195 +img2 = np.transpose(img2, (1, 2, 0))
196 +printMatrix(img2[:, :, 0])
197 +printMatrix(img2[:, :, 1])
198 +printMatrix(img2[:, :, 2])
199 +
200 +plt.subplot(231), plt.imshow(img0)
201 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
202 +
203 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
204 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
205 +
206 +plt.subplot(233), plt.imshow(magnitude_spectrum)
207 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
208 +
209 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
210 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
211 +
212 +print(img2.shape)
213 +plt.subplot(235), plt.imshow(img2)
214 +plt.title('FT'), plt.xticks([]), plt.yticks([])
215 +
216 +# plt.subplot(236), plt.imshow(im.fromarray(
217 +# img0).filter(ImageFilter.FIND_EDGES))
218 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
219 +plt.show()
220 +
221 +
222 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
223 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 255 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 2
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 +
53 + img = cv2.imread(j, 1)
54 + b, g, r = cv2.split(img)
55 + img = cv2.merge([r, g, b])
56 + img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + f = np.fft.fft2(img)
59 + fshift = np.fft.fftshift(f)
60 + rows, cols = img.shape
61 + crow, ccol = rows//2, cols//2
62 + d = l
63 + fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + f_ishift = np.fft.ifftshift(fshift)
65 + img_back = np.fft.ifft2(f_ishift)
66 + img_back = np.abs(img_back)
67 +
68 + cv2.imwrite(new_file2, img_back)
69 +
70 +for i in valid_dirList:
71 + print(i)
72 + # filelist에는 "사진 파일들의 리스트"
73 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
74 + filelist = glob(i+'\\*')
75 +
76 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
77 + before_last_path, last = os.path.split(i)
78 + before2_last_path, before_last = os.path.split(before_last_path)
79 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
80 + new_dir = os.path.join(before_last, last)
81 + new_dir = os.path.join(SAVEPATH, new_dir)
82 + print(new_dir)
83 + os.makedirs(new_dir, exist_ok=True)
84 +
85 + for j in filelist:
86 + img = im.open(j)
87 + new_file = new_dir+'\\'+os.path.basename(j)
88 + img.save(new_file)
89 +
90 +for i in test_dirList:
91 + print(i)
92 + # filelist에는 "사진 파일들의 리스트"
93 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
94 + filelist = glob(i+'\\*')
95 +
96 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
97 + before_last_path, last = os.path.split(i)
98 + before2_last_path, before_last = os.path.split(before_last_path)
99 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
100 + new_dir = os.path.join(before_last, last)
101 + new_dir = os.path.join(SAVEPATH, new_dir)
102 + print(new_dir)
103 + os.makedirs(new_dir, exist_ok=True)
104 +
105 + for j in filelist:
106 + img = im.open(j)
107 + new_file = new_dir+'\\'+os.path.basename(j)
108 + img.save(new_file)
109 +
110 +
111 +def printMatrix(a):
112 + m = len(a)
113 + n = len(a[0])
114 + for i in range(m):
115 + for j in range(n):
116 + print('{:6.2f}'.format(a[i][j]), end=' ')
117 + print()
118 + print()
119 +
120 +
121 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
122 +# colab에서는 openCV의 imshow 돌아가지 않는다.
123 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
124 +# img = cv2.imread('cifar10-train-29.png', 1)
125 +# image_pil = im.open('n04461696_3346.png')
126 +# # image_pil.show()
127 +# img1 = np.array(image_pil)
128 +# print(img1.shape)
129 +img = cv2.imread('cifar10-train-29.png', 1)
130 +
131 +
132 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
133 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
134 +print(img0.shape)
135 +# plt.subplot(211), plt.imshow(img0)
136 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
137 +
138 +# plt.subplot(212), plt.imshow(image_pil)
139 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
140 +# plt.show()
141 +
142 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
143 +img2 = img1
144 +i = 0
145 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
146 +
147 +# Fourier Transform을 적용.
148 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
149 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
150 +
151 +for img in img1:
152 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
153 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
154 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
155 + fshift = np.fft.fftshift(f)
156 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
157 +
158 + print(img.shape, fshift.shape)
159 + rows, cols = img.shape
160 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
161 +
162 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
163 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
164 + d = 1
165 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
166 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
167 +
168 + # 푸리에 변환결과를 다시 이미지로 변환
169 + f_ishift = np.fft.ifftshift(fshift)
170 + img_back = np.fft.ifft2(f_ishift)
171 + img_back = np.abs(img_back)
172 + img2[i] = img_back
173 + i += 1
174 + # threshold를 적용하기 위해 float type을 int type으로 변환
175 + img_new = np.uint8(img_back)
176 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
177 + # plt.subplot(231), plt.imshow(img)
178 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
179 +
180 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
181 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
182 +
183 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
184 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
185 +
186 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
187 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
188 +
189 + # plt.subplot(236), plt.imshow(thresh)
190 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
191 + # plt.show()
192 +
193 +img2 = np.transpose(img2, (1, 2, 0))
194 +printMatrix(img2[:, :, 0])
195 +printMatrix(img2[:, :, 1])
196 +printMatrix(img2[:, :, 2])
197 +
198 +plt.subplot(231), plt.imshow(img0)
199 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
200 +
201 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
202 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
203 +
204 +plt.subplot(233), plt.imshow(magnitude_spectrum)
205 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
206 +
207 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
208 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
209 +
210 +print(img2.shape)
211 +plt.subplot(235), plt.imshow(img2)
212 +plt.title('FT'), plt.xticks([]), plt.yticks([])
213 +
214 +# plt.subplot(236), plt.imshow(im.fromarray(
215 +# img0).filter(ImageFilter.FIND_EDGES))
216 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
217 +plt.show()
218 +
219 +
220 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
221 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 1 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 1
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 + ImageEnhance.Sharpness(img).enhance(5).save(new_file2)
53 + img = cv2.imread(j, 1)
54 + b, g, r = cv2.split(img)
55 + img = cv2.merge([r, g, b])
56 + img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + f = np.fft.fft2(img)
59 + fshift = np.fft.fftshift(f)
60 + rows, cols = img.shape
61 + crow, ccol = rows//2, cols//2
62 + d = l
63 + fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + f_ishift = np.fft.ifftshift(fshift)
65 + img_back = np.fft.ifft2(f_ishift)
66 + img_back = np.abs(img_back)
67 +
68 + new_file3 = path_without_extension + '(2)' + extension
69 + cv2.imwrite(new_file3, img_back)
70 +
71 +for i in valid_dirList:
72 + print(i)
73 + # filelist에는 "사진 파일들의 리스트"
74 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
75 + filelist = glob(i+'\\*')
76 +
77 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
78 + before_last_path, last = os.path.split(i)
79 + before2_last_path, before_last = os.path.split(before_last_path)
80 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
81 + new_dir = os.path.join(before_last, last)
82 + new_dir = os.path.join(SAVEPATH, new_dir)
83 + print(new_dir)
84 + os.makedirs(new_dir, exist_ok=True)
85 +
86 + for j in filelist:
87 + img = im.open(j)
88 + new_file = new_dir+'\\'+os.path.basename(j)
89 + img.save(new_file)
90 +
91 +for i in test_dirList:
92 + print(i)
93 + # filelist에는 "사진 파일들의 리스트"
94 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
95 + filelist = glob(i+'\\*')
96 +
97 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
98 + before_last_path, last = os.path.split(i)
99 + before2_last_path, before_last = os.path.split(before_last_path)
100 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
101 + new_dir = os.path.join(before_last, last)
102 + new_dir = os.path.join(SAVEPATH, new_dir)
103 + print(new_dir)
104 + os.makedirs(new_dir, exist_ok=True)
105 +
106 + for j in filelist:
107 + img = im.open(j)
108 + new_file = new_dir+'\\'+os.path.basename(j)
109 + img.save(new_file)
110 +
111 +
112 +def printMatrix(a):
113 + m = len(a)
114 + n = len(a[0])
115 + for i in range(m):
116 + for j in range(n):
117 + print('{:6.2f}'.format(a[i][j]), end=' ')
118 + print()
119 + print()
120 +
121 +
122 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
123 +# colab에서는 openCV의 imshow 돌아가지 않는다.
124 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
125 +# img = cv2.imread('cifar10-train-29.png', 1)
126 +# image_pil = im.open('n04461696_3346.png')
127 +# # image_pil.show()
128 +# img1 = np.array(image_pil)
129 +# print(img1.shape)
130 +img = cv2.imread('cifar10-train-29.png', 1)
131 +
132 +
133 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
134 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
135 +print(img0.shape)
136 +# plt.subplot(211), plt.imshow(img0)
137 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
138 +
139 +# plt.subplot(212), plt.imshow(image_pil)
140 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
141 +# plt.show()
142 +
143 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
144 +img2 = img1
145 +i = 0
146 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
147 +
148 +# Fourier Transform을 적용.
149 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
150 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
151 +
152 +for img in img1:
153 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
154 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
155 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
156 + fshift = np.fft.fftshift(f)
157 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
158 +
159 + print(img.shape, fshift.shape)
160 + rows, cols = img.shape
161 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
162 +
163 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
164 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
165 + d = 1
166 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
167 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
168 +
169 + # 푸리에 변환결과를 다시 이미지로 변환
170 + f_ishift = np.fft.ifftshift(fshift)
171 + img_back = np.fft.ifft2(f_ishift)
172 + img_back = np.abs(img_back)
173 + img2[i] = img_back
174 + i += 1
175 + # threshold를 적용하기 위해 float type을 int type으로 변환
176 + img_new = np.uint8(img_back)
177 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
178 + # plt.subplot(231), plt.imshow(img)
179 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
180 +
181 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
182 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
183 +
184 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
185 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
186 +
187 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
188 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
189 +
190 + # plt.subplot(236), plt.imshow(thresh)
191 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
192 + # plt.show()
193 +
194 +img2 = np.transpose(img2, (1, 2, 0))
195 +printMatrix(img2[:, :, 0])
196 +printMatrix(img2[:, :, 1])
197 +printMatrix(img2[:, :, 2])
198 +
199 +plt.subplot(231), plt.imshow(img0)
200 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
201 +
202 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
203 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
204 +
205 +plt.subplot(233), plt.imshow(magnitude_spectrum)
206 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
207 +
208 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
209 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
210 +
211 +print(img2.shape)
212 +plt.subplot(235), plt.imshow(img2)
213 +plt.title('FT'), plt.xticks([]), plt.yticks([])
214 +
215 +# plt.subplot(236), plt.imshow(im.fromarray(
216 +# img0).filter(ImageFilter.FIND_EDGES))
217 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
218 +plt.show()
219 +
220 +
221 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
222 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 1 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 1
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 + ImageEnhance.Sharpness(img).enhance(5).save(new_file2)
53 + # img = cv2.imread(j, 1)
54 + # b, g, r = cv2.split(img)
55 + # img = cv2.merge([r, g, b])
56 + # img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + # f = np.fft.fft2(img)
59 + # fshift = np.fft.fftshift(f)
60 + # rows, cols = img.shape
61 + # crow, ccol = rows//2, cols//2
62 + # d = l
63 + # fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + # f_ishift = np.fft.ifftshift(fshift)
65 + # img_back = np.fft.ifft2(f_ishift)
66 + # img_back = np.abs(img_back)
67 +
68 + # new_file3 = path_without_extension + '(2)' + extension
69 + # cv2.imwrite(new_file3, img_back)
70 +
71 +for i in valid_dirList:
72 + print(i)
73 + # filelist에는 "사진 파일들의 리스트"
74 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
75 + filelist = glob(i+'\\*')
76 +
77 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
78 + before_last_path, last = os.path.split(i)
79 + before2_last_path, before_last = os.path.split(before_last_path)
80 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
81 + new_dir = os.path.join(before_last, last)
82 + new_dir = os.path.join(SAVEPATH, new_dir)
83 + print(new_dir)
84 + os.makedirs(new_dir, exist_ok=True)
85 +
86 + for j in filelist:
87 + img = im.open(j)
88 + new_file = new_dir+'\\'+os.path.basename(j)
89 + img.save(new_file)
90 +
91 +for i in test_dirList:
92 + print(i)
93 + # filelist에는 "사진 파일들의 리스트"
94 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
95 + filelist = glob(i+'\\*')
96 +
97 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
98 + before_last_path, last = os.path.split(i)
99 + before2_last_path, before_last = os.path.split(before_last_path)
100 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
101 + new_dir = os.path.join(before_last, last)
102 + new_dir = os.path.join(SAVEPATH, new_dir)
103 + print(new_dir)
104 + os.makedirs(new_dir, exist_ok=True)
105 +
106 + for j in filelist:
107 + img = im.open(j)
108 + new_file = new_dir+'\\'+os.path.basename(j)
109 + img.save(new_file)
110 +
111 +
112 +def printMatrix(a):
113 + m = len(a)
114 + n = len(a[0])
115 + for i in range(m):
116 + for j in range(n):
117 + print('{:6.2f}'.format(a[i][j]), end=' ')
118 + print()
119 + print()
120 +
121 +
122 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
123 +# colab에서는 openCV의 imshow 돌아가지 않는다.
124 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
125 +# img = cv2.imread('cifar10-train-29.png', 1)
126 +# image_pil = im.open('n04461696_3346.png')
127 +# # image_pil.show()
128 +# img1 = np.array(image_pil)
129 +# print(img1.shape)
130 +img = cv2.imread('cifar10-train-29.png', 1)
131 +
132 +
133 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
134 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
135 +print(img0.shape)
136 +# plt.subplot(211), plt.imshow(img0)
137 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
138 +
139 +# plt.subplot(212), plt.imshow(image_pil)
140 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
141 +# plt.show()
142 +
143 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
144 +img2 = img1
145 +i = 0
146 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
147 +
148 +# Fourier Transform을 적용.
149 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
150 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
151 +
152 +for img in img1:
153 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
154 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
155 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
156 + fshift = np.fft.fftshift(f)
157 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
158 +
159 + print(img.shape, fshift.shape)
160 + rows, cols = img.shape
161 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
162 +
163 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
164 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
165 + d = 1
166 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
167 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
168 +
169 + # 푸리에 변환결과를 다시 이미지로 변환
170 + f_ishift = np.fft.ifftshift(fshift)
171 + img_back = np.fft.ifft2(f_ishift)
172 + img_back = np.abs(img_back)
173 + img2[i] = img_back
174 + i += 1
175 + # threshold를 적용하기 위해 float type을 int type으로 변환
176 + img_new = np.uint8(img_back)
177 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
178 + # plt.subplot(231), plt.imshow(img)
179 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
180 +
181 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
182 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
183 +
184 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
185 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
186 +
187 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
188 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
189 +
190 + # plt.subplot(236), plt.imshow(thresh)
191 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
192 + # plt.show()
193 +
194 +img2 = np.transpose(img2, (1, 2, 0))
195 +printMatrix(img2[:, :, 0])
196 +printMatrix(img2[:, :, 1])
197 +printMatrix(img2[:, :, 2])
198 +
199 +plt.subplot(231), plt.imshow(img0)
200 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
201 +
202 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
203 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
204 +
205 +plt.subplot(233), plt.imshow(magnitude_spectrum)
206 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
207 +
208 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
209 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
210 +
211 +print(img2.shape)
212 +plt.subplot(235), plt.imshow(img2)
213 +plt.title('FT'), plt.xticks([]), plt.yticks([])
214 +
215 +# plt.subplot(236), plt.imshow(im.fromarray(
216 +# img0).filter(ImageFilter.FIND_EDGES))
217 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
218 +plt.show()
219 +
220 +
221 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
222 +print(cv2.__version__)
1 +"""
2 +# Fourier Transform(푸리에 변환)
3 + . 시간 도메인(X축)에서 표현된 신호(일반적인 파형 도표)를 주파수 도메인으로 변환.
4 + . 시간축이 제거되어 대상의 전체적인 특징을 파악할 수 있음.
5 + . 이미지에 적용이 되어 중심이 저주파 영역, 주변이 고주파 영역을 나타냄.
6 + . 푸리에 변환을 하여 저주파 또는 고주파를 제거하고 다시 역으로 이미지로 변환 함으로써
7 + 이미지가공을 할 수 있음.
8 + (ex; 푸리에 변환 후 중심의 저주파를 제거하고 다시 Image로 전환 하면 이미지의 경계선만 남게 됨.
9 + 푸리에 변환 후 주변의 고주파를 제거하면 모아레 패턴(휴대폰으로 모니터를 찍었을 때 나타나는 현상)
10 + 을 제거할 수 있음.(모니터의 고주파를 제거함.)
11 + )
12 +"""
13 +
14 +from PIL import ImageFilter
15 +from PIL import ImageEnhance
16 +import PIL.Image as im
17 +import cv2
18 +import numpy as np
19 +from matplotlib import pyplot as plt
20 +from glob import glob
21 +import os
22 +
23 +
24 +test_dirList = glob('.\\CIFAR-10-origin-khu\\test\\*')
25 +train_dirList = glob('.\\CIFAR-10-origin-khu\\train\\*')
26 +valid_dirList = glob('.\\CIFAR-10-origin-khu\\valid\\*')
27 +SAVEPATH = '.\\CIFAR10-PILimageEnhance-sharpness(5)+2by2(middlewhite)'
28 +os.makedirs(SAVEPATH, exist_ok=True)
29 +k = 1 # fft한 후 가운데 픽셀 바꿀 값
30 +l = 1
31 +for i in train_dirList:
32 + print(i)
33 + # filelist에는 "사진 파일들의 리스트"
34 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
35 + filelist = glob(i+'\\*')
36 +
37 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
38 + before_last_path, last = os.path.split(i)
39 + before2_last_path, before_last = os.path.split(before_last_path)
40 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
41 + new_dir = os.path.join(before_last, last)
42 + new_dir = os.path.join(SAVEPATH, new_dir)
43 + print(new_dir)
44 + os.makedirs(new_dir, exist_ok=True)
45 +
46 + for j in filelist:
47 + img = im.open(j)
48 + new_file = new_dir+'\\'+os.path.basename(j)
49 + img.save(new_file)
50 + path_without_extension, extension = os.path.splitext(new_file)
51 + new_file2 = path_without_extension + '(1)' + extension
52 + img.filter(ImageFilter.SHARPEN).save(new_file2)
53 + # img = cv2.imread(j, 1)
54 + # b, g, r = cv2.split(img)
55 + # img = cv2.merge([r, g, b])
56 + # img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
57 +
58 + # f = np.fft.fft2(img)
59 + # fshift = np.fft.fftshift(f)
60 + # rows, cols = img.shape
61 + # crow, ccol = rows//2, cols//2
62 + # d = l
63 + # fshift[crow-d:crow+d, ccol-d:ccol+d] = k
64 + # f_ishift = np.fft.ifftshift(fshift)
65 + # img_back = np.fft.ifft2(f_ishift)
66 + # img_back = np.abs(img_back)
67 +
68 + # new_file3 = path_without_extension + '(2)' + extension
69 + # cv2.imwrite(new_file3, img_back)
70 +
71 +for i in valid_dirList:
72 + print(i)
73 + # filelist에는 "사진 파일들의 리스트"
74 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
75 + filelist = glob(i+'\\*')
76 +
77 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
78 + before_last_path, last = os.path.split(i)
79 + before2_last_path, before_last = os.path.split(before_last_path)
80 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
81 + new_dir = os.path.join(before_last, last)
82 + new_dir = os.path.join(SAVEPATH, new_dir)
83 + print(new_dir)
84 + os.makedirs(new_dir, exist_ok=True)
85 +
86 + for j in filelist:
87 + img = im.open(j)
88 + new_file = new_dir+'\\'+os.path.basename(j)
89 + img.save(new_file)
90 +
91 +for i in test_dirList:
92 + print(i)
93 + # filelist에는 "사진 파일들의 리스트"
94 + # glob는 괄호 안 (어떤 path(폴더,파일 다 가능)명 조건) 에 맞는 "path명의 리스트" 뽑을때
95 + filelist = glob(i+'\\*')
96 +
97 + # i는 '.\khu-machine-learning-competition\train\airplane'이므로 os.path.spilt(i) 결과는 ('.\khu-machine-learning-competition\train','airplane') 튜플
98 + before_last_path, last = os.path.split(i)
99 + before2_last_path, before_last = os.path.split(before_last_path)
100 + # 해보니까 new_dir = os.path.join(before_last, last) 이건 new_dir = before_last+'\\'+ last 와 동일함...
101 + new_dir = os.path.join(before_last, last)
102 + new_dir = os.path.join(SAVEPATH, new_dir)
103 + print(new_dir)
104 + os.makedirs(new_dir, exist_ok=True)
105 +
106 + for j in filelist:
107 + img = im.open(j)
108 + new_file = new_dir+'\\'+os.path.basename(j)
109 + img.save(new_file)
110 +
111 +
112 +def printMatrix(a):
113 + m = len(a)
114 + n = len(a[0])
115 + for i in range(m):
116 + for j in range(n):
117 + print('{:6.2f}'.format(a[i][j]), end=' ')
118 + print()
119 + print()
120 +
121 +
122 +# OpenCV에서 한글 파일이나 경로명이 들어간 경우 imread와 imwrite가 동작하지 않는다... ㅠ
123 +# colab에서는 openCV의 imshow 돌아가지 않는다.
124 +# 두번째 파라미터 1 의미는 cv2.IMREAD_COLOR cf) cv2.IMREAD_COLOR : 1, cv2.IMREAD_GRAYSCALE : 0, cv2.IMREAD_UNCHANGED : -1
125 +# img = cv2.imread('cifar10-train-29.png', 1)
126 +# image_pil = im.open('n04461696_3346.png')
127 +# # image_pil.show()
128 +# img1 = np.array(image_pil)
129 +# print(img1.shape)
130 +img = cv2.imread('cifar10-train-29.png', 1)
131 +
132 +
133 +b, g, r = cv2.split(img) # 이미지를 b,g,r 채널로 분리 (opencv에서는 bgr순서)
134 +img0 = cv2.merge([r, g, b]) # r,g,b 순서로 병합
135 +print(img0.shape)
136 +# plt.subplot(211), plt.imshow(img0)
137 +# plt.title('Input Image_cv2'), plt.xticks([]), plt.yticks([])
138 +
139 +# plt.subplot(212), plt.imshow(image_pil)
140 +# plt.title('Input Image_PIL'), plt.xticks([]), plt.yticks([])
141 +# plt.show()
142 +
143 +img1 = np.array([img0[:, :, 0], img0[:, :, 1], img0[:, :, 2]])
144 +img2 = img1
145 +i = 0
146 +# img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # color->gray로 변환
147 +
148 +# Fourier Transform을 적용.
149 +# 적용을 하면 0, 0, 즉 화면 좌측상단점이 중심이고, 거기에 저주파가 모여 있음.
150 +# 분석을 용이하게 하기 위해 0, 0을 이미지의 중심으로 이동 시키고 Log Scaling을 하여 분석이 용이한 결과값으로 변환
151 +
152 +for img in img1:
153 + f = np.fft.fft2(img) # 이미지에 푸리에 변환 적용
154 + # 분석을 용이하게 하기 위해 주파수가 0인 부분을 중앙에 위치시킴. 중앙에 저주파가 모이게 됨.
155 + magnitude_spectrum_no_shift = 20*np.log(np.abs(f))
156 + fshift = np.fft.fftshift(f)
157 + magnitude_spectrum = 20*np.log(np.abs(fshift)) # spectrum 구하는 수학식.
158 +
159 + print(img.shape, fshift.shape)
160 + rows, cols = img.shape
161 + crow, ccol = rows//2, cols//2 # 이미지의 중심 좌표
162 +
163 + # 중앙에서 10X10 사이즈의 사각형의 값을 1로 설정함. 중앙의 저주파를 모두 제거
164 + # 저주파를 제거하였기 때문에 배경이 사라지고 경계선만 남게 됨.
165 + d = 1
166 + fshift[crow-d:crow+d, ccol-d:ccol+d] = 1
167 + aft_magnitude_spectrum = 20*np.log(np.abs(fshift))
168 +
169 + # 푸리에 변환결과를 다시 이미지로 변환
170 + f_ishift = np.fft.ifftshift(fshift)
171 + img_back = np.fft.ifft2(f_ishift)
172 + img_back = np.abs(img_back)
173 + img2[i] = img_back
174 + i += 1
175 + # threshold를 적용하기 위해 float type을 int type으로 변환
176 + img_new = np.uint8(img_back)
177 + ret, thresh = cv2.threshold(img_new, 20, 255, cv2.THRESH_BINARY)
178 + # plt.subplot(231), plt.imshow(img)
179 + # plt.title('Input Image'), plt.xticks([]), plt.yticks([])
180 +
181 + # plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
182 + # plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
183 +
184 + # plt.subplot(233), plt.imshow(magnitude_spectrum)
185 + # plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
186 +
187 + # plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
188 + # plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
189 +
190 + # plt.subplot(236), plt.imshow(thresh)
191 + # plt.title('Threshold With FT'), plt.xticks([]), plt.yticks([])
192 + # plt.show()
193 +
194 +img2 = np.transpose(img2, (1, 2, 0))
195 +printMatrix(img2[:, :, 0])
196 +printMatrix(img2[:, :, 1])
197 +printMatrix(img2[:, :, 2])
198 +
199 +plt.subplot(231), plt.imshow(img0)
200 +plt.title('Input Image'), plt.xticks([]), plt.yticks([])
201 +
202 +plt.subplot(232), plt.imshow(magnitude_spectrum_no_shift)
203 +plt.title('noShift_Spectrum'), plt.xticks([]), plt.yticks([])
204 +
205 +plt.subplot(233), plt.imshow(magnitude_spectrum)
206 +plt.title('Spectrum'), plt.xticks([]), plt.yticks([])
207 +
208 +plt.subplot(234), plt.imshow(aft_magnitude_spectrum)
209 +plt.title('aft_Spectrum'), plt.xticks([]), plt.yticks([])
210 +
211 +print(img2.shape)
212 +plt.subplot(235), plt.imshow(img2)
213 +plt.title('FT'), plt.xticks([]), plt.yticks([])
214 +
215 +# plt.subplot(236), plt.imshow(im.fromarray(
216 +# img0).filter(ImageFilter.FIND_EDGES))
217 +# plt.title('ImageFilter.CONTOUR'), plt.xticks([]), plt.yticks([])
218 +plt.show()
219 +
220 +
221 +# im.fromarray(img2).save("cifar10-train-16513 (2)-1.png")
222 +print(cv2.__version__)
This diff could not be displayed because it is too large.