|
19 | 19 | "from geometric_transform import *\n", |
20 | 20 | "from region_growing import *\n", |
21 | 21 | "from edge_detection import *\n", |
22 | | - "from dft import *\n" |
| 22 | + "from dft import *\n", |
| 23 | + "from morphology_process import *\n", |
| 24 | + "from geometry import *\n", |
| 25 | + "from contour import *" |
23 | 26 | ] |
24 | 27 | }, |
25 | 28 | { |
26 | 29 | "cell_type": "code", |
27 | | - "execution_count": null, |
| 30 | + "execution_count": 2, |
28 | 31 | "metadata": {}, |
29 | 32 | "outputs": [], |
30 | 33 | "source": [ |
|
109 | 112 | "\n", |
110 | 113 | " elif method == '形态学处理':\n", |
111 | 114 | " processed_image = morphology_process(image, sub_option)\n", |
| 115 | + "\n", |
| 116 | + " elif method == '几何形状检测':\n", |
| 117 | + " processed_image = geometric_dectect(image, sub_option)\n", |
| 118 | + "\n", |
| 119 | + " elif method == '轮廓提取':\n", |
| 120 | + " processed_image = contours(image, sub_option, threshold)\n", |
112 | 121 | " \n", |
113 | 122 | " \n", |
114 | 123 | " \n", |
|
123 | 132 | { |
124 | 133 | "data": { |
125 | 134 | "application/vnd.jupyter.widget-view+json": { |
126 | | - "model_id": "4d6c6bf9fd1a4f3598e6b825cb3d8e79", |
| 135 | + "model_id": "a0f5536bf2dc4ff0aa5be60830e15400", |
127 | 136 | "version_major": 2, |
128 | 137 | "version_minor": 0 |
129 | 138 | }, |
|
137 | 146 | { |
138 | 147 | "data": { |
139 | 148 | "application/vnd.jupyter.widget-view+json": { |
140 | | - "model_id": "6474644e0a12414b82a83da934ed6083", |
| 149 | + "model_id": "38bed6e2e9c3438a8222f46142c55dc2", |
141 | 150 | "version_major": 2, |
142 | 151 | "version_minor": 0 |
143 | 152 | }, |
144 | 153 | "text/plain": [ |
145 | | - "Dropdown(description='处理方法:', options=('灰度化', '二值化', '滤波', '锐化', '几何变换', '图像分割', '边缘检测', '频域滤波'), value='灰度化')" |
| 154 | + "Dropdown(description='处理方法:', options=('灰度化', '二值化', '滤波', '锐化', '几何变换', '图像分割', '边缘检测', '频域滤波', '形态学处理', '几何形…" |
146 | 155 | ] |
147 | 156 | }, |
148 | 157 | "metadata": {}, |
|
151 | 160 | { |
152 | 161 | "data": { |
153 | 162 | "application/vnd.jupyter.widget-view+json": { |
154 | | - "model_id": "5bf6822fc8b04386a972a853c84efbbf", |
| 163 | + "model_id": "efc34abc5469467cbc3b0f8754ec4326", |
155 | 164 | "version_major": 2, |
156 | 165 | "version_minor": 0 |
157 | 166 | }, |
|
165 | 174 | { |
166 | 175 | "data": { |
167 | 176 | "application/vnd.jupyter.widget-view+json": { |
168 | | - "model_id": "efcecbb0d851489d84443616f17e215d", |
| 177 | + "model_id": "9040e55ae6b84282ba8aecff544d9f70", |
169 | 178 | "version_major": 2, |
170 | 179 | "version_minor": 0 |
171 | 180 | }, |
172 | 181 | "text/plain": [ |
173 | | - "IntSlider(value=127, description='阈值:', layout=Layout(visibility='hidden'), max=255)" |
| 182 | + "IntSlider(value=99, description='阈值:', layout=Layout(visibility='visible'), max=255)" |
174 | 183 | ] |
175 | 184 | }, |
176 | 185 | "metadata": {}, |
|
179 | 188 | { |
180 | 189 | "data": { |
181 | 190 | "application/vnd.jupyter.widget-view+json": { |
182 | | - "model_id": "d265ad29c3264622b8171a6f11b8f524", |
| 191 | + "model_id": "410ce78eb16e46869a94ec05c3a043e5", |
183 | 192 | "version_major": 2, |
184 | 193 | "version_minor": 0 |
185 | 194 | }, |
|
193 | 202 | { |
194 | 203 | "data": { |
195 | 204 | "application/vnd.jupyter.widget-view+json": { |
196 | | - "model_id": "2d2cdd9bf06f4d39832329fff88a755b", |
| 205 | + "model_id": "042c3e14d54341edb8ea3d561cbd625e", |
197 | 206 | "version_major": 2, |
198 | 207 | "version_minor": 0 |
199 | 208 | }, |
|
207 | 216 | { |
208 | 217 | "data": { |
209 | 218 | "application/vnd.jupyter.widget-view+json": { |
210 | | - "model_id": "c2832dbb2fa345feb2869736a9b65ace", |
| 219 | + "model_id": "a5cb4cd65ef2421ca03352e2d8bcd7b7", |
211 | 220 | "version_major": 2, |
212 | 221 | "version_minor": 0 |
213 | 222 | }, |
|
221 | 230 | { |
222 | 231 | "data": { |
223 | 232 | "application/vnd.jupyter.widget-view+json": { |
224 | | - "model_id": "4b3de52f7b4c4a99a5de86544574cbf9", |
| 233 | + "model_id": "b65e54fce3b14a589c8b716f0e2609a5", |
225 | 234 | "version_major": 2, |
226 | 235 | "version_minor": 0 |
227 | 236 | }, |
|
235 | 244 | { |
236 | 245 | "data": { |
237 | 246 | "application/vnd.jupyter.widget-view+json": { |
238 | | - "model_id": "0ac2dc72a40b4490ad9e1c4a5244d20b", |
| 247 | + "model_id": "1f38c97f4dd74b7a82956a21bc2fd75e", |
239 | 248 | "version_major": 2, |
240 | 249 | "version_minor": 0 |
241 | 250 | }, |
|
256 | 265 | "\n", |
257 | 266 | "# 方法选择下拉菜单\n", |
258 | 267 | "method_dropdown = widgets.Dropdown(\n", |
259 | | - " options=['灰度化', '二值化', '滤波', '锐化', '几何变换', '图像分割', '边缘检测', '频域滤波', '形态学处理'], \n", |
| 268 | + " options=['灰度化', '二值化', '滤波', '锐化', '几何变换', '图像分割', \n", |
| 269 | + " '边缘检测', '频域滤波', '形态学处理', '几何形状检测', '轮廓提取'], \n", |
260 | 270 | " value='灰度化',\n", |
261 | 271 | " description='处理方法:'\n", |
262 | 272 | ")\n", |
|
333 | 343 | " elif edge_method == 'Canny算子':\n", |
334 | 344 | " low_threshold = edge_detection_params.children[1].value\n", |
335 | 345 | " high_threshold = edge_detection_params.children[2].value\n", |
336 | | - " processed_image = canny_edge_detection(image, low_threshold, high_threshold) \n", |
| 346 | + " processed_image = canny_edge_detection(image, low_threshold, high_threshold) \n", |
| 347 | + " elif method_dropdown.value == '轮廓提取':\n", |
| 348 | + " if sub_option_dropdown.value == '轮廓绘制':\n", |
| 349 | + " processed_image = process_image(image, method_dropdown.value, sub_option_dropdown.value, threshold=threshold_slider.value)\n", |
337 | 350 | " else:\n", |
338 | 351 | " processed_image = process_image(image, method_dropdown.value, sub_option_dropdown.value)\n", |
339 | 352 | " \n", |
|
422 | 435 | "\n", |
423 | 436 | " elif change['new'] == '形态学处理':\n", |
424 | 437 | " sub_option_dropdown.options = ['膨胀', '腐蚀', '开运算', '闭运算', '形态学梯度', '顶帽', '黑帽']\n", |
| 438 | + "\n", |
| 439 | + " elif change['new'] == '几何形状检测':\n", |
| 440 | + " sub_option_dropdown.options = ['轮廓检测']\n", |
| 441 | + " \n", |
| 442 | + " elif change['new'] == '轮廓提取':\n", |
| 443 | + " sub_option_dropdown.options = ['轮廓绘制']\n", |
| 444 | + " if sub_option_dropdown.value == '轮廓绘制':\n", |
| 445 | + " threshold_slider.layout.visibility = 'visible'\n", |
| 446 | + " else:\n", |
| 447 | + " threshold_slider.layout.visibility = 'hidden'\n", |
425 | 448 | " \n", |
426 | 449 | "method_dropdown.observe(on_method_change, names='value')\n", |
427 | 450 | "\n", |
|
477 | 500 | " edge_detection_params.layout.visibility = 'visible'\n", |
478 | 501 | " edge_detection_params.children[1].layout.visibility = 'visible' if change['new'] == 'Canny算子' else 'hidden'\n", |
479 | 502 | " edge_detection_params.children[2].layout.visibility = 'visible' if change['new'] == 'Canny算子' else 'hidden'\n", |
| 503 | + " \n", |
| 504 | + " elif method_dropdown.value == '轮廓提取':\n", |
| 505 | + " if change['new'] == '轮廓绘制':\n", |
| 506 | + " threshold_slider.layout.visibility = 'visible'\n", |
| 507 | + "\n", |
480 | 508 | "\n", |
481 | 509 | "sub_option_dropdown.observe(on_sub_option_change, names='value')\n", |
482 | 510 | "\n", |
|
0 commit comments