teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

プログラム全文を掲載しました

2021/01/19 10:22

投稿

vamrat
vamrat

スコア20

title CHANGED
File without changes
body CHANGED
@@ -72,7 +72,116 @@
72
72
 
73
73
  ### 該当のソースコード
74
74
 
75
+ ```analyze.py
76
+ import cv2
77
+ import numpy as np
78
+ import matplotlib.pyplot as plt
79
+ import methods
80
+
81
+
82
+ # 入力画像読込
83
+ # 画像サイズ(500(width) x 218(height) pix)
84
+ img = cv2.imread('images/madslide12.jpg', cv2.IMREAD_COLOR)
85
+
86
+ # オリジナル画像保存
87
+ # import pdb; pdb.set_trace()
88
+ org = img.copy()
89
+ cv2.imwrite('results/original.png', org)
90
+
91
+ # 画像ファイル
92
+ # - 画像データを処理プログラムに送る
93
+ methods.image(org,img)
94
+
95
+ # PyMeanShift
96
+ # - 第1引数:探索範囲、第2引数:探索色相、第3引数:粗さ
97
+ methods.meanshift(12,3,200)
98
+
99
+ # ヒストグラム均一化
100
+ methods.contrast()
101
+
102
+ # 類似色統合
103
+ methods.clustering()
104
+
105
+ # ブロック分割
106
+ methods.division()
107
+
108
+ # カラーラベリング
109
+ methods.labeling()
110
+ ```
111
+
75
- ```python
112
+ ```methods.py
113
+ import cv2
114
+ import matplotlib.pyplot as plt
115
+ import matplotlib as mpl
116
+ import numpy as np
117
+ import pymeanshift as pms
118
+ import os
119
+ import sys
120
+ from PIL import Image
121
+ # sys.setrecursionlimit(8000) # 200 x 113 pix
122
+ sys.setrecursionlimit(30000) # 500 x 281 pix
123
+ plt.gray()
124
+
125
+
126
+ def image(_org,_img):
127
+ global org,img,h,w,c
128
+ global bo,go,ro,al
129
+
130
+ org,img = _org,_img
131
+ h,w,c = img.shape
132
+ bo,go,ro = cv2.split(org)
133
+ al = 0.55
134
+
135
+ def meanshift(spatial_radius,range_radius,min_density):
136
+ global img
137
+ (img,labels,num) = pms.segment(cv2.cvtColor(img,cv2.COLOR_BGR2Lab),spatial_radius,range_radius,min_density)
138
+ img = cv2.cvtColor(img, cv2.COLOR_Lab2BGR)
139
+ cv2.imwrite('results/meanshift.png',img)
140
+
141
+ def contrast():
142
+ global img
143
+ hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
144
+ h,s,v = cv2.split(hsv)
145
+
146
+ clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(3, 3))
147
+ result = clahe.apply(v)
148
+
149
+ hsv = cv2.merge((h,s,result))
150
+ img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
151
+ cv2.imwrite("results/contrast.png", img)
152
+
153
+ def division():
154
+ global block
155
+ hs,ws,cnt = 113,200,1
156
+
157
+ if ((h>hs)&(w>ws)):
158
+ for j in range(0,h,hs):
159
+ for i in range(0,w,ws):
160
+ if (((j+hs)<h)&((i+ws)<w)):
161
+ div = np.zeros((hs,ws,c),dtype=int)
162
+ div[0:hs,0:ws] = img[j:j+hs,i:i+ws]
163
+ else:
164
+ if (((i+ws)>w)&((j+hs)>h)):
165
+ div = np.zeros((h-j,w-i,c),dtype=int)
166
+ div[0:h-j,0:w-i] = img[j:h,i:w]
167
+ elif ((j+hs)>h):
168
+ div = np.zeros((h-j,ws,c),dtype=int)
169
+ div[0:h-j,0:ws] = img[j:h,i:i+ws]
170
+ else:
171
+ div = np.zeros((hs,w-i,c),dtype=int)
172
+ div[0:hs,0:w-i] = img[j:j+hs,i:w]
173
+ cv2.imwrite('results/division/division{}.png'.format(cnt),div)
174
+ cnt += 1
175
+ block = cnt
176
+ print('block number :',block)
177
+
178
+ def clustering():
179
+ global img
180
+ im = Image.open('results/contrast.png')
181
+ im_q = im.quantize(colors=128, method=0, dither=1)
182
+ im_q.save('results/clustering.png')
183
+ img = cv2.imread('results/clustering.png', cv2.IMREAD_COLOR)
184
+
76
185
  def approximation(pix1,pix2):
77
186
  dif = abs(pix1.astype(np.int8)-pix2.astype(np.int8))
78
187
  d1,d2,d3 = dif[0],dif[1],dif[2]