├── Feature_Extraction_Gray_Level_Co_occurrence_Matrix_(GLCM)_with_Python.ipynb
├── LICENSE
└── README.md
/Feature_Extraction_Gray_Level_Co_occurrence_Matrix_(GLCM)_with_Python.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "name": "Feature Extraction : Gray Level Co-occurrence Matrix (GLCM) with Python",
7 | "provenance": [],
8 | "collapsed_sections": [],
9 | "mount_file_id": "1pnf5flN8E_ZnMcmQG-tz16T2SXzWsu0r",
10 | "authorship_tag": "ABX9TyOA0DTso9KaoLBtDoeQB2H7",
11 | "include_colab_link": true
12 | },
13 | "kernelspec": {
14 | "name": "python3",
15 | "display_name": "Python 3"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | "
"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {
32 | "id": "uo8LKkwZVvL5"
33 | },
34 | "source": [
35 | "**1) Kita akan menggunakan library 'os' untuk membaca nama file dari folder, dan library 'cv2' (OpenCV) untuk melakukan pemrosesan citra**"
36 | ]
37 | },
38 | {
39 | "cell_type": "code",
40 | "metadata": {
41 | "id": "lxO4GIUtCaBc",
42 | "colab": {
43 | "base_uri": "https://localhost:8080/"
44 | },
45 | "outputId": "6050889b-4cc1-4ea2-b50b-e67825387afc"
46 | },
47 | "source": [
48 | "import numpy as np \n",
49 | "import cv2 \n",
50 | "import os\n",
51 | "import re\n",
52 | "\n",
53 | "# -------------------- Utility function ------------------------\n",
54 | "def normalize_label(str_):\n",
55 | " str_ = str_.replace(\" \", \"\")\n",
56 | " str_ = str_.translate(str_.maketrans(\"\",\"\", \"()\"))\n",
57 | " str_ = str_.split(\"_\")\n",
58 | " return ''.join(str_[:2])\n",
59 | "\n",
60 | "def normalize_desc(folder, sub_folder):\n",
61 | " text = folder + \" - \" + sub_folder \n",
62 | " text = re.sub(r'\\d+', '', text)\n",
63 | " text = text.replace(\".\", \"\")\n",
64 | " text = text.strip()\n",
65 | " return text\n",
66 | "\n",
67 | "def print_progress(val, val_len, folder, sub_folder, filename, bar_size=10):\n",
68 | " progr = \"#\"*round((val)*bar_size/val_len) + \" \"*round((val_len - (val))*bar_size/val_len)\n",
69 | " if val == 0:\n",
70 | " print(\"\", end = \"\\n\")\n",
71 | " else:\n",
72 | " print(\"[%s] folder : %s/%s/ ----> file : %s\" % (progr, folder, sub_folder, filename), end=\"\\r\")\n",
73 | " \n",
74 | "\n",
75 | "# -------------------- Load Dataset ------------------------\n",
76 | " \n",
77 | "dataset_dir = \"/content/drive/MyDrive/DATASET\" \n",
78 | "\n",
79 | "imgs = [] #list image matrix \n",
80 | "labels = []\n",
81 | "descs = []\n",
82 | "for folder in os.listdir(dataset_dir):\n",
83 | " for sub_folder in os.listdir(os.path.join(dataset_dir, folder)):\n",
84 | " sub_folder_files = os.listdir(os.path.join(dataset_dir, folder, sub_folder))\n",
85 | " len_sub_folder = len(sub_folder_files) - 1\n",
86 | " for i, filename in enumerate(sub_folder_files):\n",
87 | " img = cv2.imread(os.path.join(dataset_dir, folder, sub_folder, filename))\n",
88 | " \n",
89 | " gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n",
90 | " \n",
91 | " h, w = gray.shape\n",
92 | " ymin, ymax, xmin, xmax = h//3, h*2//3, w//3, w*2//3\n",
93 | " crop = gray[ymin:ymax, xmin:xmax]\n",
94 | " \n",
95 | " resize = cv2.resize(crop, (0,0), fx=0.5, fy=0.5)\n",
96 | " \n",
97 | " imgs.append(resize)\n",
98 | " labels.append(normalize_label(os.path.splitext(filename)[0]))\n",
99 | " descs.append(normalize_desc(folder, sub_folder))\n",
100 | " \n",
101 | " print_progress(i, len_sub_folder, folder, sub_folder, filename)"
102 | ],
103 | "execution_count": null,
104 | "outputs": [
105 | {
106 | "output_type": "stream",
107 | "text": [
108 | "\n",
109 | "\n",
110 | "\n"
111 | ],
112 | "name": "stdout"
113 | }
114 | ]
115 | },
116 | {
117 | "cell_type": "markdown",
118 | "metadata": {
119 | "id": "IGruSE15WX1J"
120 | },
121 | "source": [
122 | "**2) Keseluruhan dataset citra daun akan tersimpan pada list 'imgs' dan nama daun disimpan pada list 'labels'. Kita dapat preview salah satu citra dengan cara berikut**"
123 | ]
124 | },
125 | {
126 | "cell_type": "code",
127 | "metadata": {
128 | "colab": {
129 | "base_uri": "https://localhost:8080/",
130 | "height": 83
131 | },
132 | "id": "kPOvWvWHR2Yh",
133 | "outputId": "0fe1e01d-1e05-4eae-988c-7a9bd9b0a2ed"
134 | },
135 | "source": [
136 | "from google.colab.patches import cv2_imshow\n",
137 | "cv2_imshow(imgs[5])"
138 | ],
139 | "execution_count": null,
140 | "outputs": [
141 | {
142 | "output_type": "display_data",
143 | "data": {
144 | "image/png": "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\n",
145 | "text/plain": [
146 | ""
147 | ]
148 | },
149 | "metadata": {
150 | "tags": []
151 | }
152 | }
153 | ]
154 | },
155 | {
156 | "cell_type": "markdown",
157 | "metadata": {
158 | "id": "WlBgWxQ_WmTR"
159 | },
160 | "source": [
161 | "**3) Selanjutnya kita dapat mencari matrix GLCM dan metric texture keseluruhan citra daun dengan menggunakan fungsi greycomatrix() dan greycoprops() pada library Scikit-Image**"
162 | ]
163 | },
164 | {
165 | "cell_type": "code",
166 | "metadata": {
167 | "id": "5FTp6wFpGrSs"
168 | },
169 | "source": [
170 | "from skimage.feature import greycomatrix, greycoprops\n",
171 | "\n",
172 | "# ----------------- calculate greycomatrix() & greycoprops() for angle 0, 45, 90, 135 ----------------------------------\n",
173 | "def calc_glcm_all_agls(img, label, props, dists=[5], agls=[0, np.pi/4, np.pi/2, 3*np.pi/4], lvl=256, sym=True, norm=True):\n",
174 | " \n",
175 | " glcm = greycomatrix(img, \n",
176 | " distances=dists, \n",
177 | " angles=agls, \n",
178 | " levels=lvl,\n",
179 | " symmetric=sym, \n",
180 | " normed=norm)\n",
181 | " feature = []\n",
182 | " glcm_props = [propery for name in props for propery in greycoprops(glcm, name)[0]]\n",
183 | " for item in glcm_props:\n",
184 | " feature.append(item)\n",
185 | " feature.append(label) \n",
186 | " \n",
187 | " return feature\n",
188 | "\n",
189 | "\n",
190 | "# ----------------- call calc_glcm_all_agls() for all properties ----------------------------------\n",
191 | "properties = ['dissimilarity', 'correlation', 'homogeneity', 'contrast', 'ASM', 'energy']\n",
192 | "\n",
193 | "glcm_all_agls = []\n",
194 | "for img, label in zip(imgs, labels): \n",
195 | " glcm_all_agls.append(\n",
196 | " calc_glcm_all_agls(img, \n",
197 | " label, \n",
198 | " props=properties)\n",
199 | " )\n",
200 | " \n",
201 | "columns = []\n",
202 | "angles = ['0', '45', '90','135']\n",
203 | "for name in properties :\n",
204 | " for ang in angles:\n",
205 | " columns.append(name + \"_\" + ang)\n",
206 | " \n",
207 | "columns.append(\"label\")"
208 | ],
209 | "execution_count": null,
210 | "outputs": []
211 | },
212 | {
213 | "cell_type": "markdown",
214 | "metadata": {
215 | "id": "VFYtEXJGW2B-"
216 | },
217 | "source": [
218 | "**4) Selanjutnya kita ubah format data glcm_features dari list menjadi Dataframe menggunakan library pandas**"
219 | ]
220 | },
221 | {
222 | "cell_type": "code",
223 | "metadata": {
224 | "colab": {
225 | "base_uri": "https://localhost:8080/",
226 | "height": 534
227 | },
228 | "id": "g70Kv8FTGW1l",
229 | "outputId": "d72e1d73-35a3-455c-8793-1e3433609b3d"
230 | },
231 | "source": [
232 | "import pandas as pd \n",
233 | "\n",
234 | "# Create the pandas DataFrame for GLCM features data\n",
235 | "glcm_df = pd.DataFrame(glcm_all_agls, \n",
236 | " columns = columns)\n",
237 | "\n",
238 | "glcm_df.head(15)"
239 | ],
240 | "execution_count": null,
241 | "outputs": [
242 | {
243 | "output_type": "execute_result",
244 | "data": {
245 | "text/html": [
246 | "\n",
247 | "\n",
260 | "
\n",
261 | " \n",
262 | " \n",
263 | " | \n",
264 | " dissimilarity_0 | \n",
265 | " dissimilarity_45 | \n",
266 | " dissimilarity_90 | \n",
267 | " dissimilarity_135 | \n",
268 | " correlation_0 | \n",
269 | " correlation_45 | \n",
270 | " correlation_90 | \n",
271 | " correlation_135 | \n",
272 | " homogeneity_0 | \n",
273 | " homogeneity_45 | \n",
274 | " homogeneity_90 | \n",
275 | " homogeneity_135 | \n",
276 | " contrast_0 | \n",
277 | " contrast_45 | \n",
278 | " contrast_90 | \n",
279 | " contrast_135 | \n",
280 | " ASM_0 | \n",
281 | " ASM_45 | \n",
282 | " ASM_90 | \n",
283 | " ASM_135 | \n",
284 | " energy_0 | \n",
285 | " energy_45 | \n",
286 | " energy_90 | \n",
287 | " energy_135 | \n",
288 | " label | \n",
289 | "
\n",
290 | " \n",
291 | " \n",
292 | " \n",
293 | " 0 | \n",
294 | " 6.945604 | \n",
295 | " 6.631113 | \n",
296 | " 4.832091 | \n",
297 | " 6.852758 | \n",
298 | " 0.451720 | \n",
299 | " 0.482434 | \n",
300 | " 0.725584 | \n",
301 | " 0.469734 | \n",
302 | " 0.190978 | \n",
303 | " 0.205142 | \n",
304 | " 0.231599 | \n",
305 | " 0.192076 | \n",
306 | " 104.887481 | \n",
307 | " 98.913111 | \n",
308 | " 51.415797 | \n",
309 | " 101.415193 | \n",
310 | " 0.001949 | \n",
311 | " 0.002004 | \n",
312 | " 0.002371 | \n",
313 | " 0.001961 | \n",
314 | " 0.044144 | \n",
315 | " 0.044761 | \n",
316 | " 0.048696 | \n",
317 | " 0.044282 | \n",
318 | " jambu1GRAYC | \n",
319 | "
\n",
320 | " \n",
321 | " 1 | \n",
322 | " 8.568058 | \n",
323 | " 7.317378 | \n",
324 | " 6.747889 | \n",
325 | " 8.901405 | \n",
326 | " 0.347678 | \n",
327 | " 0.523747 | \n",
328 | " 0.564154 | \n",
329 | " 0.343938 | \n",
330 | " 0.167020 | \n",
331 | " 0.187366 | \n",
332 | " 0.179366 | \n",
333 | " 0.139533 | \n",
334 | " 157.265524 | \n",
335 | " 114.526015 | \n",
336 | " 101.611773 | \n",
337 | " 158.622008 | \n",
338 | " 0.001486 | \n",
339 | " 0.001642 | \n",
340 | " 0.001594 | \n",
341 | " 0.001333 | \n",
342 | " 0.038549 | \n",
343 | " 0.040516 | \n",
344 | " 0.039926 | \n",
345 | " 0.036505 | \n",
346 | " jambu2GRAYC | \n",
347 | "
\n",
348 | " \n",
349 | " 2 | \n",
350 | " 5.108048 | \n",
351 | " 5.038762 | \n",
352 | " 3.274714 | \n",
353 | " 5.018991 | \n",
354 | " 0.641410 | \n",
355 | " 0.670960 | \n",
356 | " 0.898662 | \n",
357 | " 0.692801 | \n",
358 | " 0.225383 | \n",
359 | " 0.221336 | \n",
360 | " 0.278620 | \n",
361 | " 0.215296 | \n",
362 | " 60.467213 | \n",
363 | " 56.285900 | \n",
364 | " 19.544461 | \n",
365 | " 52.003902 | \n",
366 | " 0.003352 | \n",
367 | " 0.003520 | \n",
368 | " 0.003929 | \n",
369 | " 0.003301 | \n",
370 | " 0.057899 | \n",
371 | " 0.059330 | \n",
372 | " 0.062683 | \n",
373 | " 0.057454 | \n",
374 | " jambu3GRAYC | \n",
375 | "
\n",
376 | " \n",
377 | " 3 | \n",
378 | " 7.681818 | \n",
379 | " 6.331165 | \n",
380 | " 4.583209 | \n",
381 | " 6.643080 | \n",
382 | " 0.170933 | \n",
383 | " 0.368438 | \n",
384 | " 0.706236 | \n",
385 | " 0.395651 | \n",
386 | " 0.214456 | \n",
387 | " 0.236072 | \n",
388 | " 0.251631 | \n",
389 | " 0.218759 | \n",
390 | " 143.130899 | \n",
391 | " 108.309834 | \n",
392 | " 49.489816 | \n",
393 | " 103.457336 | \n",
394 | " 0.003516 | \n",
395 | " 0.003883 | \n",
396 | " 0.003861 | \n",
397 | " 0.003467 | \n",
398 | " 0.059293 | \n",
399 | " 0.062315 | \n",
400 | " 0.062140 | \n",
401 | " 0.058883 | \n",
402 | " jambu4GRAYC | \n",
403 | "
\n",
404 | " \n",
405 | " 4 | \n",
406 | " 6.701689 | \n",
407 | " 6.039802 | \n",
408 | " 4.300546 | \n",
409 | " 6.475286 | \n",
410 | " 0.380918 | \n",
411 | " 0.452372 | \n",
412 | " 0.723213 | \n",
413 | " 0.455338 | \n",
414 | " 0.201916 | \n",
415 | " 0.221474 | \n",
416 | " 0.239759 | \n",
417 | " 0.179263 | \n",
418 | " 121.137357 | \n",
419 | " 106.911811 | \n",
420 | " 54.076006 | \n",
421 | " 106.333247 | \n",
422 | " 0.002266 | \n",
423 | " 0.002401 | \n",
424 | " 0.002533 | \n",
425 | " 0.002157 | \n",
426 | " 0.047602 | \n",
427 | " 0.048999 | \n",
428 | " 0.050326 | \n",
429 | " 0.046445 | \n",
430 | " jambu5GRAYC | \n",
431 | "
\n",
432 | " \n",
433 | " 5 | \n",
434 | " 39.567312 | \n",
435 | " 42.037981 | \n",
436 | " 36.546200 | \n",
437 | " 40.573101 | \n",
438 | " 0.344789 | \n",
439 | " 0.261661 | \n",
440 | " 0.402319 | \n",
441 | " 0.308987 | \n",
442 | " 0.025514 | \n",
443 | " 0.021513 | \n",
444 | " 0.033100 | \n",
445 | " 0.024430 | \n",
446 | " 2449.936413 | \n",
447 | " 2731.565036 | \n",
448 | " 2248.355440 | \n",
449 | " 2559.065817 | \n",
450 | " 0.000169 | \n",
451 | " 0.000175 | \n",
452 | " 0.000175 | \n",
453 | " 0.000176 | \n",
454 | " 0.012997 | \n",
455 | " 0.013234 | \n",
456 | " 0.013217 | \n",
457 | " 0.013248 | \n",
458 | " mangga1GRAYC | \n",
459 | "
\n",
460 | " \n",
461 | " 6 | \n",
462 | " 21.248634 | \n",
463 | " 20.373049 | \n",
464 | " 15.598112 | \n",
465 | " 21.664932 | \n",
466 | " 0.394672 | \n",
467 | " 0.440111 | \n",
468 | " 0.712337 | \n",
469 | " 0.386133 | \n",
470 | " 0.064679 | \n",
471 | " 0.064411 | \n",
472 | " 0.080584 | \n",
473 | " 0.061806 | \n",
474 | " 877.216344 | \n",
475 | " 815.080125 | \n",
476 | " 447.425733 | \n",
477 | " 900.295005 | \n",
478 | " 0.000420 | \n",
479 | " 0.000425 | \n",
480 | " 0.000468 | \n",
481 | " 0.000437 | \n",
482 | " 0.020492 | \n",
483 | " 0.020613 | \n",
484 | " 0.021641 | \n",
485 | " 0.020901 | \n",
486 | " mangga2GRAYC | \n",
487 | "
\n",
488 | " \n",
489 | " 7 | \n",
490 | " 23.688773 | \n",
491 | " 23.139958 | \n",
492 | " 19.968455 | \n",
493 | " 23.340010 | \n",
494 | " 0.679093 | \n",
495 | " 0.705738 | \n",
496 | " 0.783783 | \n",
497 | " 0.684737 | \n",
498 | " 0.062572 | \n",
499 | " 0.058134 | \n",
500 | " 0.067319 | \n",
501 | " 0.064012 | \n",
502 | " 1107.535271 | \n",
503 | " 1017.881374 | \n",
504 | " 754.058867 | \n",
505 | " 1077.703694 | \n",
506 | " 0.000371 | \n",
507 | " 0.000394 | \n",
508 | " 0.000403 | \n",
509 | " 0.000402 | \n",
510 | " 0.019253 | \n",
511 | " 0.019862 | \n",
512 | " 0.020082 | \n",
513 | " 0.020057 | \n",
514 | " mangga3GRAYC | \n",
515 | "
\n",
516 | " \n",
517 | " 8 | \n",
518 | " 31.254347 | \n",
519 | " 36.582726 | \n",
520 | " 31.728763 | \n",
521 | " 32.450312 | \n",
522 | " 0.385286 | \n",
523 | " 0.181319 | \n",
524 | " 0.285737 | \n",
525 | " 0.333208 | \n",
526 | " 0.058684 | \n",
527 | " 0.058477 | \n",
528 | " 0.069617 | \n",
529 | " 0.057810 | \n",
530 | " 1933.382017 | \n",
531 | " 2570.233091 | \n",
532 | " 2204.178838 | \n",
533 | " 2092.857180 | \n",
534 | " 0.000362 | \n",
535 | " 0.000359 | \n",
536 | " 0.000415 | \n",
537 | " 0.000369 | \n",
538 | " 0.019021 | \n",
539 | " 0.018948 | \n",
540 | " 0.020367 | \n",
541 | " 0.019217 | \n",
542 | " mangga4GRAYC | \n",
543 | "
\n",
544 | " \n",
545 | " 9 | \n",
546 | " 17.724789 | \n",
547 | " 18.348595 | \n",
548 | " 14.715847 | \n",
549 | " 18.867066 | \n",
550 | " 0.694301 | \n",
551 | " 0.673658 | \n",
552 | " 0.793261 | \n",
553 | " 0.660221 | \n",
554 | " 0.102366 | \n",
555 | " 0.090989 | \n",
556 | " 0.105956 | \n",
557 | " 0.095279 | \n",
558 | " 700.084451 | \n",
559 | " 747.999480 | \n",
560 | " 479.137109 | \n",
561 | " 783.537721 | \n",
562 | " 0.000724 | \n",
563 | " 0.000720 | \n",
564 | " 0.000834 | \n",
565 | " 0.000768 | \n",
566 | " 0.026916 | \n",
567 | " 0.026825 | \n",
568 | " 0.028888 | \n",
569 | " 0.027705 | \n",
570 | " mangga5GRAYC | \n",
571 | "
\n",
572 | " \n",
573 | " 10 | \n",
574 | " 18.464729 | \n",
575 | " 18.118887 | \n",
576 | " 13.830353 | \n",
577 | " 18.306452 | \n",
578 | " 0.133190 | \n",
579 | " 0.182443 | \n",
580 | " 0.557351 | \n",
581 | " 0.153801 | \n",
582 | " 0.067360 | \n",
583 | " 0.069469 | \n",
584 | " 0.080925 | \n",
585 | " 0.062330 | \n",
586 | " 664.033532 | \n",
587 | " 626.806712 | \n",
588 | " 332.087183 | \n",
589 | " 650.906348 | \n",
590 | " 0.000429 | \n",
591 | " 0.000421 | \n",
592 | " 0.000460 | \n",
593 | " 0.000421 | \n",
594 | " 0.020705 | \n",
595 | " 0.020507 | \n",
596 | " 0.021453 | \n",
597 | " 0.020517 | \n",
598 | " kelengkeng1GRAYC | \n",
599 | "
\n",
600 | " \n",
601 | " 11 | \n",
602 | " 15.175360 | \n",
603 | " 15.128252 | \n",
604 | " 12.012419 | \n",
605 | " 14.861342 | \n",
606 | " 0.550093 | \n",
607 | " 0.550945 | \n",
608 | " 0.738140 | \n",
609 | " 0.558531 | \n",
610 | " 0.066951 | \n",
611 | " 0.067982 | \n",
612 | " 0.082398 | \n",
613 | " 0.070640 | \n",
614 | " 407.742176 | \n",
615 | " 403.701093 | \n",
616 | " 234.292101 | \n",
617 | " 397.802549 | \n",
618 | " 0.000367 | \n",
619 | " 0.000377 | \n",
620 | " 0.000410 | \n",
621 | " 0.000382 | \n",
622 | " 0.019148 | \n",
623 | " 0.019417 | \n",
624 | " 0.020242 | \n",
625 | " 0.019546 | \n",
626 | " kelengkeng2GRAYC | \n",
627 | "
\n",
628 | " \n",
629 | " 12 | \n",
630 | " 15.256831 | \n",
631 | " 14.268730 | \n",
632 | " 10.434178 | \n",
633 | " 15.194329 | \n",
634 | " 0.397236 | \n",
635 | " 0.461994 | \n",
636 | " 0.747955 | \n",
637 | " 0.416425 | \n",
638 | " 0.080664 | \n",
639 | " 0.088758 | \n",
640 | " 0.100693 | \n",
641 | " 0.081603 | \n",
642 | " 494.942871 | \n",
643 | " 440.878512 | \n",
644 | " 202.347740 | \n",
645 | " 476.619927 | \n",
646 | " 0.000445 | \n",
647 | " 0.000477 | \n",
648 | " 0.000514 | \n",
649 | " 0.000444 | \n",
650 | " 0.021089 | \n",
651 | " 0.021835 | \n",
652 | " 0.022681 | \n",
653 | " 0.021064 | \n",
654 | " kelengkeng3GRAYC | \n",
655 | "
\n",
656 | " \n",
657 | " 13 | \n",
658 | " 20.962742 | \n",
659 | " 20.732050 | \n",
660 | " 16.105315 | \n",
661 | " 19.768730 | \n",
662 | " 0.661143 | \n",
663 | " 0.677599 | \n",
664 | " 0.800079 | \n",
665 | " 0.691157 | \n",
666 | " 0.056693 | \n",
667 | " 0.054245 | \n",
668 | " 0.071028 | \n",
669 | " 0.062310 | \n",
670 | " 767.216592 | \n",
671 | " 731.799168 | \n",
672 | " 449.474416 | \n",
673 | " 699.913371 | \n",
674 | " 0.000258 | \n",
675 | " 0.000257 | \n",
676 | " 0.000282 | \n",
677 | " 0.000276 | \n",
678 | " 0.016064 | \n",
679 | " 0.016023 | \n",
680 | " 0.016807 | \n",
681 | " 0.016627 | \n",
682 | " kelengkeng4GRAYC | \n",
683 | "
\n",
684 | " \n",
685 | " 14 | \n",
686 | " 34.720815 | \n",
687 | " 32.738554 | \n",
688 | " 26.057129 | \n",
689 | " 35.132934 | \n",
690 | " 0.265411 | \n",
691 | " 0.321737 | \n",
692 | " 0.531553 | \n",
693 | " 0.266787 | \n",
694 | " 0.027568 | \n",
695 | " 0.031913 | \n",
696 | " 0.048475 | \n",
697 | " 0.030473 | \n",
698 | " 1953.552409 | \n",
699 | " 1835.321280 | \n",
700 | " 1294.752111 | \n",
701 | " 1978.791623 | \n",
702 | " 0.000191 | \n",
703 | " 0.000200 | \n",
704 | " 0.000211 | \n",
705 | " 0.000195 | \n",
706 | " 0.013831 | \n",
707 | " 0.014147 | \n",
708 | " 0.014527 | \n",
709 | " 0.013979 | \n",
710 | " kelengkeng5GRAYC | \n",
711 | "
\n",
712 | " \n",
713 | "
\n",
714 | "
"
715 | ],
716 | "text/plain": [
717 | " dissimilarity_0 dissimilarity_45 ... energy_135 label\n",
718 | "0 6.945604 6.631113 ... 0.044282 jambu1GRAYC\n",
719 | "1 8.568058 7.317378 ... 0.036505 jambu2GRAYC\n",
720 | "2 5.108048 5.038762 ... 0.057454 jambu3GRAYC\n",
721 | "3 7.681818 6.331165 ... 0.058883 jambu4GRAYC\n",
722 | "4 6.701689 6.039802 ... 0.046445 jambu5GRAYC\n",
723 | "5 39.567312 42.037981 ... 0.013248 mangga1GRAYC\n",
724 | "6 21.248634 20.373049 ... 0.020901 mangga2GRAYC\n",
725 | "7 23.688773 23.139958 ... 0.020057 mangga3GRAYC\n",
726 | "8 31.254347 36.582726 ... 0.019217 mangga4GRAYC\n",
727 | "9 17.724789 18.348595 ... 0.027705 mangga5GRAYC\n",
728 | "10 18.464729 18.118887 ... 0.020517 kelengkeng1GRAYC\n",
729 | "11 15.175360 15.128252 ... 0.019546 kelengkeng2GRAYC\n",
730 | "12 15.256831 14.268730 ... 0.021064 kelengkeng3GRAYC\n",
731 | "13 20.962742 20.732050 ... 0.016627 kelengkeng4GRAYC\n",
732 | "14 34.720815 32.738554 ... 0.013979 kelengkeng5GRAYC\n",
733 | "\n",
734 | "[15 rows x 25 columns]"
735 | ]
736 | },
737 | "metadata": {
738 | "tags": []
739 | },
740 | "execution_count": 17
741 | }
742 | ]
743 | }
744 | ]
745 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Alfian Hidayatulloh
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Feature Extraction: Gray-Level Co-occurrence Matrix (GLCM) with Python
2 |
3 | Gray-Level Co-occurrence matrix (GLCM) is a texture analysis method in digital image processing. This method represents the relationship between two neighboring pixels that have gray intensity, distance, and angle. In general, we use GLCM to get texture features in images such as dissimilarity, correlation, homogeneity, contrast, and others.
4 |
5 | This repository contains scripts or source code on how to perform feature extraction on images that have been converted into grayscale images so that we can utilize the extraction results for various needs such as correlation analysis between features, features in classification, and others.
6 |
--------------------------------------------------------------------------------