Repository navigation
Expand file tree
/
Copy pathpseudoCode.txt
More file actions
282 lines (247 loc) · 10.7 KB
/
Copy pathpseudoCode.txt
File metadata and controls
282 lines (247 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
필요한 라이브러리 import
PIL을 이용해 분석에 사용할 이미지 불러오기
k 값 정의
픽셀 수, 행의 수, 열의 수, floor 저장
이미지를 2차원 배열로 변환
K_Means 클래스
생성자(k, 2차원 배열, row, col)
k-means clustering에 필요한 배열들 정의
색상의 개수 저장할 배열들 정의
색상의 세부 이름 저장하고 있는 배열들 정의
세부 색상의 시작값 저장하고 있는 배열들 정의
세부 색상의 끝값 저장하고 있는 배열들 정의
엑셀 파일로 저장하기 위해 필요한 배열들 정의
0부터 픽셀의 개수 중 랜덤한 k개의 정수를 tmp 배열에 저장
for i = 0 to k-1 do
중심점의 값 저장하는 배열 = 데이터[tmp[i]]
endfor
클러스터링(클러스터링 횟수)
for _ = 0 to 클러스터링 횟수-1 do
for i = 0 to 픽셀 개수-1 do
for j = 0 to k-1 do
중심점으로부터 각 픽셀의 거리 = 중심점과 각 픽셀 간의 유클리디안 거리
endfor
픽셀이 속하는 클러스터 = 가장 거리가 짧은 중심점의 번호
endfor
for i = 0 to k-1 do
군집의 모든 rgb 값의 평균으로 중심점 설정 -> rgb 값만 변경하고 중심점의 좌표를 갱신하지 않기 때문에 오류 발생
endfor
endfor
양자화()
for i = 0 to 픽셀 개수-1 do
for j = 0 to k-1 do
각 픽셀들의 값을 속하는 클러스터의 중심점의 값으로 치환
endfor
endfor
RGB를 HSV로 변환()
공식에 따라 RGB를 HSV로 변환
각 h, s, v 배열에 저장
RGB를 HSV로 변환 후 return()
똑같은 공식을 사용해 변환
각 h, s, v 배열에 저장
return h, s, v
색의 결과값 저장()
if 색상을 저장하는 배열의 값 == 기본 값 then
색의 소분류 결과 저장
색의 대분류 카운트 1 증가
색의 소분류 카운트 1 증가
endif
return 세부 색상
색 소분류(전체 데이터에서의 인덱스, 색 대분류 번호)
for i = 0 to 색 대분류 개수-1 do
if 인덱스의 h 값 > 색상의 i번째 start color and 인덱스의 h 값 <= 색상의 i번째 end color then
return 색의 결과값 저장(인덱스, 색 대분류 번호, i)
endif
if 색 대분류 번호 == 0 and 색상의 i번째 start color == 1 then
return 색의 결과값 저장(인덱스, 색 대분류 번호, 1)
endif
색 대분류(전체 데이터에서의 인덱스)
if 인덱스의 값 < cyan start color then
if 인덱스의 값 < yellow start color then
if 인덱스의 값 < oragne start color then
return 색 소분류(인덱스, 0)
else
return 색 소분류(인덱스, 1)
endif
else
if 인덱스의 값 < green start color then
if 인덱스의 값 < lightGreen start color then
return 색 소분류(인덱스, 2)
else
return 색 소분류(인덱스, 3)
endif
else
return 색 소분류(인덱스, 4)
endif
endif
else
if 인덱스의 값 < indigo start color then
if 인덱스의 값 < blue start color then
return 색 소분류(인덱스, 5)
else
return 색 소분류(인덱스, 6)
endif
else
if 인덱스의 값 < magenta start color then
return 색 소분류(인덱스, 7)
else
if 인덱스의 값 < magenta end color then
return 색 소분류(인덱스, 8)
else
return 색 소분류(인덱스, 0)
endif
endif
endif
endif
색 분류()
for 인덱스 = 0 to 픽셀의 개수-1 do
if 인덱스의 s < 20 and 인덱스의 v <= 20 and 인덱스의 v >= 0 then
색의 결과값 저장(인덱스, 9, 0)
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 20 and 인덱스의 v <= 90 then
색의 결과값 저장(인덱스, 10, 0)
endif
if 인덱스의 s >= 4 and 인덱스의 s < 8 and 인덱스의 v > 20 and 인덱스의 v <= 70 then
색의 결과값 저장(인덱스, 10, 0)
endif
if 인덱스의 s >= 8 and 인덱스의 s < 12 and 인덱스의 v > 20 and 인덱스의 v <= 50 then
색의 결과값 저장(인덱스, 10, 0)
endif
if 인덱스의 s >= 12 and 인덱스의 s < 16 and 인덱스의 v > 20 and 인덱스의 v <= 30 then
색의 결과값 저장(인덱스, 10, 0)
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 90 and 인덱스의 v <=100 then
색의 결과값 저장(인덱스, 11, 0)
endif
색 대분류(인덱스)
endfor
엑셀을 위한 색 분류(전체 데이터에서의 인덱스)
if 인덱스의 s < 20 and 인덱스의 v <= 20 and 인덱스의 v >= 0 then
return "Black"
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 20 and 인덱스의 v <= 90 then
return "Grey"
endif
if 인덱스의 s >= 4 and 인덱스의 s < 8 and 인덱스의 v > 20 and 인덱스의 v <= 70 then
return "Grey"
endif
if 인덱스의 s >= 8 and 인덱스의 s < 12 and 인덱스의 v > 20 and 인덱스의 v <= 50 then
return "Grey"
endif
if 인덱스의 s >= 12 and 인덱스의 s < 16 and 인덱스의 v > 20 and 인덱스의 v <= 30 then
return "Grey"
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 90 and 인덱스의 v <=100 then
return "White"
endif
엑셀을 위한 색 대분류(인덱스)
엑셀을 위한 색 대분류(전체 데이터에서의 인덱스)
if 인덱스의 값 < cyan start color then
if 인덱스의 값 < yellow start color then
if 인덱스의 값 < oragne start color then
return "Red"
else
return "Oragne"
endif
else
if 인덱스의 값 < green start color then
if 인덱스의 값 < lightGreen start color then
return "Yellow"
else
return "LightGreen"
endif
else
return "Green"
endif
endif
else
if 인덱스의 값 < indigo start color then
if 인덱스의 값 < blue start color then
return "Cyan"
else
return "Blue"
endif
else
if 인덱스의 값 < magenta start color then
return "Indigo"
else
if 인덱스의 값 < magenta end color then
return "Magenta"
else
return "Red"
endif
endif
endif
endif
엑셀을 위한 색 소분류(전체 데이터에서의 인덱스)
if 인덱스의 s < 20 and 인덱스의 v <= 20 and 인덱스의 v >= 0 then
색의 결과값 저장(인덱스, 9, 0)
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 20 and 인덱스의 v <= 90 then
return "Black"
endif
if 인덱스의 s >= 4 and 인덱스의 s < 8 and 인덱스의 v > 20 and 인덱스의 v <= 70 then
return "Grey"
endif
if 인덱스의 s >= 8 and 인덱스의 s < 12 and 인덱스의 v > 20 and 인덱스의 v <= 50 then
return "Grey"
endif
if 인덱스의 s >= 12 and 인덱스의 s < 16 and 인덱스의 v > 20 and 인덱스의 v <= 30 then
return "Grey"
endif
if 인덱스의 s >= 0 and 인덱스의 s < 4 and 인덱스의 v > 90 and 인덱스의 v <=100 then
return "White"
endif
색 대분류(인덱스)
엑셀로 저장()
for i = 0 to k-1 do
RGB, HSV, 이미지 아이디, 대분류 색상, 소분류 색상, 픽셀 개수, 픽셀의 비율 저장
endfor
for i = 0 to 색 대분류 개수-1 do
for j = 0 to k-1 do
if i번째 대분류 색 == j번째 대분류 색 then
대표 색상 카운트 증가
endif
endfor
endfor
비교하기 위한 compare = 0
for i = 0 to 색 대분류 개수-1 do
if compare < i번째 대표 색상 카운트 then
compare = i번째 대표 색상 카운트
endif
endfor
대표색 = 대표 색상 카운트 중 가장 큰 값
for i = 0 to k-1 do
i번째 대표색 = 대표색
endfor
엑셀 데이터 = {
'Image Id' : 이미지 id,
'Number of K' : k 값,
'RGB' : rgb 값,
'HSV' : hsv 값,
'Big Color' : 대분류 색,
'Small Color' : 소분류 색,
'Pixel Count' : 픽셀 개수,
'Sum of Every Pixel' : 픽셀 전체 개수,
'Pixel Ratio' : 해당 색의 픽셀 비율,
'Most Color' : 대표색
}
엑셀 데이터를 데이터프레임으로 변환
파일 이름 = "날짜.xlsx"
if 파일이름이 존재하지 않음 then
파일 새로 작성(sheet_name=sheetName)
else
기존 파일에 작성(sheet_name=sheetName, startcol=0, startrow=write.sheets[sheetName])
endif
RGB, HSV 값을 텍스트로 저장()
각 값을 텍스트로 저장
이미지 띄우기()
데이터를 원본 이미지의 shape으로 변환
이미지.show()
객체 = K_Means(k 값, data, row, col)
객체에 대한 클러스터링
객체에 대한 양자화
객체의 RGB를 HSV로 변환
객체의 색상 분류
객체를 엑셀로 저장
객체의 이미지 띄우기