画像処理による鋳鉄の黒鉛形状の評価

# はじめに
CV黒鉛鋳鉄や球状黒鉛鋳鉄の組織画像において、黒鉛の形状を評価することがあります。
JIS G5502やG5505では、丸み係数と呼ばれるパラメータを使って黒鉛の形状を評価していますが、形状を評価するパラメータにはCircular shape factor、Aspect ratioなど<sup>(1)</sup>様々あります。ここでは、それらのパラメータを求めるプログラムを作成して、実際の組織画像における個々の黒鉛形状のパラメータを測定してみました。

# プログラムの解説
作成環境は次のとおりです。
VSC 1.74.0
python 3.8.10
opencv 4.6.0.66

以下、プログラムです。
まず、必要なライブラリをインポートします。
```python:
import tkinter
from tkinter import filedialog
import math
import cv2
import matplotlib.pyplot as plt
```

続いて環境を設定します。
iDirには画像ファイルを選択する際に最初にダイアログで表示させるフォルダを指定します。
pic_widthは画像処理で用いる画像データの横幅を指定します。どのようなサイズの画像ファイルを読み込んでも、画像処理で用いる画像データはpic_widthの幅に変換されます。
min_grainsize=0.0071は画像の幅に対する黒鉛球状化率の評価に用いる最小黒鉛の大きさを表します。

```python
iDir='C:/Data'
pic_width=1920
min_grainsize=0.0071
```

ダイアログを使って組織画像のファイルを選択します。 
```python
root=tkinter.Tk()
root.withdraw()
fTyp = [("jpg", "*.jpg"), ("BMP", "*.bmp"), ("png", "*.png"), ("tiff", "*.tif")] 
filename = filedialog.askopenfilename(title='画像ファイルを選んでください', filetypes=fTyp, initialdir=iDir) 
```

ダイアログで選択した画像ファイルを開いて、サイズを調べます。
```python
img_color = cv2.imread(filename)
img_height, img_width, channel = img_color.shape
pic_height=int(pic_width * img_height / img_width)
img_color = cv2.resize(img_color, (pic_width, pic_height)) 
```

読み込んだ画像を幅pic_width（=1920）、高さpic_heightの大きさに変換してから、グレー変換、白黒反転の二値化処理、輪郭の検出を行います。二値化処理には、しきい値を自動的に求める大津の二値化を用います。
```python
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
ret, img_inv_binary = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(img_inv_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
```

黒鉛球状化率の評価に用いる黒鉛を選別する関数を定義します。
この関数は、contours、画像の幅と高さ、min_grainsizeを入力して、画像の縁に接している輪郭や、min_grainsizeより小さい輪郭をcontoursから取り除いてconters1に格納するものです。
関数定義後にその関数を実行します。

```python
def select_contours(contours, pic_width, pic_height, min_grainsize):
    contours1 = []
    for e, cnt in enumerate(contours):
        x_rect, y_rect, w_rect, h_rect = cv2.boundingRect(cnt)
        (x_circle, y_circle), radius_circle = cv2.minEnclosingCircle(cnt)
        if int(pic_width * min_grainsize) <= 2 * radius_circle \
            and 0 < int(x_rect) and 0 < int(y_rect) and \
            int(x_rect + w_rect) < pic_width and int(y_rect + h_rect) < pic_height:
            contours1.append(cnt)  
    return contours1

contours1 = select_contours(contours, pic_width, pic_height, min_grainsize) 
```

黒鉛形状の評価に用いるパラメータのうち、Opencvにない関数を定義します。
まず、黒鉛の長軸を求める関数を定義します。この関数は、輪郭の凸包を入力すると、輪郭の長軸の中心位置と軸長を返します。
```python
def get_graphite_length(hull):
    max_distance = 0
    for i, hull_x in enumerate(hull):
        for j, hull_y in enumerate(hull):
            if j + 1 < len(hull) and i != j + 1:
                dis_x = hull[j+1][0][0] - hull[i][0][0]
                dis_y = hull[j+1][0][1] - hull[i][0][1]
                dis = math.sqrt(dis_x**2 + dis_y**2)
                if dis > max_distance:
                    max_distance = dis
                    x = dis_x * 0.5 + hull[i][0][0]
                    y = dis_y * 0.5 + hull[i][0][1]
    return(x, y, max_distance)     
```
次に、最大内接円を求める関数を定義します。この関数は、輪郭を入力すると、最大内接円の中心座標と直径を返します。
```python
def get_max_circle(contour):
    dist = 0
    dia = 0
    x, y, w, h = cv2.boundingRect(contour)
    for k in range(x, x + w):
        for l in range(y, y + h):
            dist = cv2.pointPolygonTest(contour, (k, l), True)
            if dist > dia:
                dia = dist
                x1 = k
                y1 = l
    dia *= 2 #半径から直径に変換
    return x1, y1, dia
```

組織画像の個々の黒鉛に対して、各種のパラメータ（<i>CSF</i>、<i>Round</i>、<i>CSFm</i>、<i>CSFg</i>、<i>AR</i>、<i>MR</i>、<i>BF</i>、<i>Conv</i>、<i>Sol</i>）<sup>(1)</sup>を計算して、結果の表示やファイル保存を行います。
なお、フェレット径（Fmax、Fmin）については文献<sup>(2)</sup>の説明を参考にして求めました。

```python
result = 'No.,CSF,Round,CSFm,CSFg,AR,MR,BF,Conv,Sol\n'
for i, cnt in enumerate(contours1): #すべての輪郭に対して実施

    A = cv2.contourArea(cnt)
    hull = cv2.convexHull(cnt)
    Ac = cv2.contourArea(hull)

    P = cv2.arcLength(cnt, True)
    Pc = cv2.arcLength(hull, True)

    #黒鉛の長軸（maxFeret)
    feret_x, feret_y, Fmax = get_graphite_length(hull) # 輪郭の長軸の中心座標（x, y）と長軸の半分の長さ
    
    rect = cv2.minAreaRect(cnt)
    (x, y), (wid, hei), angle = rect
    
    if hei <= wid:
        Fmin = hei 
    elif wid < hei:
        Fmin = wid
        
    #黒鉛の最大内接円
    x1, y1, W = get_max_circle(cnt)

    #各種パラメータの計算
    CSF = (4 * math.pi * A) / (P ** 2)
    Round = (4 * A) / (math.pi * (Fmax ** 2))
    CSFm = (4 * A) / (P * Fmax)
    CSFg = (16 * (A ** 2)) / (math.pi * P * (Fmax ** 3))
    AR = Fmin / Fmax
    MR = W / Fmax
    BF = W / Fmin
    Conv = Pc / P
    Sol = A / Ac
    result += '%d,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f\n' \
                % (i,CSF,Round,CSFm,CSFg,AR,MR,BF,Conv,Sol)
    cv2.putText(img_color, text=str(i), org=(int(x1+W/4), int(y1+W/4)), fontFace=cv2.FONT_HERSHEY_SIMPLEX
                , fontScale=1, color=(0, 0, 0), thickness=2
                , lineType=cv2.LINE_4)

plt.imshow(cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB))
print(result)

#結果のファイル保存
plt.savefig("c:/Data/ResultPicture.png", format="png", dpi=300) #画像ファイル

f1 = open('c:/Data/ResultData.csv', 'w') #画像ファイルの数字で示した黒鉛の形状データ
if f1 != "":
    print(result, file = f1)
f1.close()
```

以下に
https://github.com/repositoryfiles/Nodularity
の「sample1(min_grainsize=0.007).jpg」に対して上記の処理を実行した結果を示します。

出力された画像ファイル
![ResultPicture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/6ec6f5ec-8a6b-b3ad-9b26-0d239111c542.png)

<details>
<summary>出力された黒鉛の形状データ（▶で開き、▼で閉じます）</summary>
<pre>
<code>
No.	CSF	Round	CSFm	CSFg	AR	MR	BF	Conv	Sol
0	0.789	0.756	0.772	0.584	0.823	0.691	0.84	0.942	0.94
1	0.625	0.506	0.562	0.285	0.618	0.555	0.898	0.905	0.897
2	0.77	0.798	0.784	0.626	0.884	0.761	0.861	0.917	0.941
3	0.729	0.833	0.78	0.65	0.929	0.801	0.862	0.899	0.937
4	0.66	0.552	0.603	0.333	0.697	0.548	0.786	0.932	0.877
5	0.785	0.792	0.788	0.624	0.88	0.762	0.866	0.934	0.943
6	0.425	0.401	0.413	0.166	0.582	0.449	0.771	0.844	0.744
7	0.802	0.869	0.835	0.726	0.928	0.857	0.924	0.93	0.961
8	0.817	0.731	0.773	0.565	0.749	0.686	0.916	0.951	0.955
9	0.807	0.734	0.77	0.565	0.754	0.703	0.932	0.942	0.951
10	0.33	0.709	0.484	0.343	0.874	0.58	0.663	0.657	0.814
11	0.804	0.871	0.837	0.729	0.929	0.807	0.868	0.934	0.954
12	0.757	0.681	0.718	0.489	0.721	0.668	0.926	0.944	0.947
13	0.769	0.829	0.798	0.662	0.913	0.83	0.91	0.918	0.947
14	0.705	0.788	0.745	0.587	0.84	0.711	0.847	0.881	0.934
15	0.833	0.848	0.84	0.712	0.936	0.794	0.849	0.952	0.955
16	0.832	0.822	0.827	0.679	0.886	0.809	0.913	0.946	0.962
17	0.753	0.724	0.738	0.534	0.824	0.666	0.808	0.916	0.94
18	0.752	0.608	0.676	0.411	0.625	0.56	0.896	0.945	0.945
19	0.83	0.817	0.824	0.673	0.914	0.775	0.848	0.956	0.946
20	0.796	0.864	0.829	0.716	0.927	0.811	0.875	0.92	0.963
21	0.844	0.787	0.815	0.642	0.809	0.735	0.909	0.963	0.963
22	0.658	0.566	0.61	0.345	0.706	0.588	0.833	0.932	0.908
23	0.606	0.441	0.517	0.228	0.588	0.462	0.786	0.946	0.862
24	0.871	0.863	0.867	0.748	0.902	0.831	0.921	0.957	0.973
25	0.814	0.73	0.771	0.563	0.864	0.709	0.82	0.949	0.954
26	0.75	0.749	0.75	0.562	0.802	0.67	0.836	0.923	0.919
27	0.478	0.541	0.509	0.275	0.667	0.455	0.683	0.811	0.833
28	0.285	0.394	0.335	0.132	0.604	0.458	0.758	0.713	0.654
29	0.76	0.845	0.801	0.677	0.909	0.818	0.9	0.91	0.952
30	0.789	0.753	0.771	0.581	0.846	0.748	0.883	0.938	0.947
31	0.702	0.605	0.652	0.394	0.716	0.597	0.833	0.919	0.911
32	0.818	0.842	0.83	0.699	0.917	0.82	0.894	0.935	0.961
33	0.827	0.755	0.79	0.596	0.856	0.686	0.801	0.959	0.949
34	0.78	0.682	0.729	0.498	0.758	0.678	0.894	0.949	0.943
35	0.329	0.456	0.387	0.177	0.846	0.435	0.514	0.779	0.637
36	0.807	0.777	0.792	0.615	0.78	0.717	0.919	0.942	0.955
37	0.85	0.923	0.885	0.817	0.969	0.873	0.901	0.944	0.967
38	0.614	0.554	0.583	0.323	0.745	0.604	0.811	0.912	0.87
39	0.299	0.203	0.246	0.05	0.322	0.208	0.645	0.891	0.645
40	0.802	0.772	0.787	0.607	0.882	0.78	0.884	0.935	0.958
41	0.836	0.903	0.869	0.785	0.941	0.86	0.914	0.941	0.963
42	0.473	0.489	0.481	0.235	0.684	0.395	0.577	0.842	0.797
43	0.741	0.597	0.665	0.397	0.669	0.579	0.866	0.934	0.93
44	0.8	0.719	0.758	0.545	0.815	0.745	0.914	0.94	0.959
45	0.811	0.868	0.839	0.729	0.931	0.842	0.904	0.934	0.959
46	0.864	0.845	0.854	0.722	0.873	0.838	0.96	0.962	0.969
47	0.759	0.519	0.627	0.325	0.591	0.525	0.889	0.972	0.959
48	0.772	0.71	0.74	0.525	0.826	0.749	0.907	0.925	0.945
49	0.859	0.89	0.874	0.778	0.917	0.846	0.922	0.956	0.966
50	0.624	0.809	0.71	0.575	0.878	0.746	0.851	0.828	0.936
51	0.861	0.795	0.827	0.658	0.865	0.751	0.868	0.973	0.962
52	0.727	0.805	0.765	0.616	0.861	0.727	0.844	0.898	0.935
53	0.543	0.544	0.544	0.296	0.729	0.5	0.686	0.866	0.816
54	0.863	0.84	0.851	0.715	0.836	0.801	0.958	0.954	0.976
55	0.843	0.801	0.822	0.659	0.845	0.754	0.892	0.956	0.96
56	0.351	0.306	0.328	0.1	0.404	0.272	0.673	0.813	0.715
57	0.803	0.866	0.834	0.723	0.942	0.805	0.855	0.932	0.952
58	0.808	0.633	0.715	0.453	0.722	0.649	0.9	0.963	0.953
59	0.785	0.793	0.789	0.626	0.817	0.746	0.913	0.933	0.947
60	0.844	0.863	0.853	0.736	0.902	0.834	0.924	0.943	0.97
61	0.357	0.216	0.278	0.06	0.367	0.246	0.669	0.934	0.677
62	0.437	0.587	0.507	0.298	0.727	0.501	0.689	0.753	0.838
63	0.858	0.872	0.865	0.754	0.914	0.837	0.916	0.956	0.965
64	0.812	0.784	0.798	0.626	0.853	0.764	0.896	0.947	0.95
65	0.664	0.616	0.639	0.394	0.721	0.549	0.762	0.933	0.861
66	0.656	0.821	0.734	0.603	0.921	0.689	0.748	0.865	0.907
67	0.828	0.76	0.794	0.603	0.894	0.667	0.745	0.962	0.943
68	0.771	0.72	0.746	0.537	0.798	0.692	0.867	0.925	0.944
69	0.799	0.89	0.843	0.75	0.954	0.815	0.854	0.928	0.956
70	0.772	0.811	0.791	0.642	0.915	0.784	0.858	0.939	0.937
71	0.831	0.86	0.845	0.727	0.927	0.836	0.901	0.935	0.971
72	0.564	0.507	0.534	0.271	0.647	0.424	0.656	0.884	0.836
73	0.79	0.805	0.798	0.642	0.887	0.831	0.937	0.927	0.954
74	0.776	0.731	0.753	0.55	0.769	0.678	0.881	0.929	0.945
75	0.774	0.702	0.737	0.518	0.748	0.631	0.844	0.936	0.94
76	0.854	0.844	0.849	0.717	0.89	0.822	0.923	0.956	0.965
77	0.794	0.799	0.797	0.637	0.891	0.793	0.891	0.927	0.953
78	0.855	0.843	0.849	0.715	0.917	0.821	0.895	0.956	0.966
79	0.749	0.868	0.806	0.699	0.937	0.848	0.906	0.905	0.948
80	0.795	0.776	0.785	0.609	0.824	0.784	0.952	0.943	0.952
81	0.776	0.766	0.771	0.591	0.878	0.768	0.875	0.931	0.937
82	0.413	0.518	0.463	0.24	0.789	0.434	0.55	0.773	0.768
83	0.835	0.823	0.829	0.683	0.848	0.795	0.938	0.947	0.962
84	0.785	0.642	0.71	0.455	0.806	0.632	0.784	0.956	0.939
85	0.599	0.776	0.682	0.529	0.928	0.725	0.781	0.839	0.89
86	0.857	0.809	0.833	0.673	0.868	0.767	0.884	0.969	0.96
87	0.615	0.703	0.658	0.463	0.775	0.702	0.906	0.833	0.936
88	0.757	0.702	0.729	0.512	0.778	0.708	0.911	0.914	0.95
89	0.84	0.814	0.827	0.674	0.857	0.771	0.9	0.954	0.957
90	0.84	0.745	0.791	0.589	0.846	0.757	0.894	0.951	0.96
91	0.709	0.746	0.728	0.543	0.818	0.743	0.909	0.904	0.927
92	0.845	0.8	0.822	0.657	0.87	0.783	0.9	0.952	0.961
93	0.821	0.857	0.839	0.719	0.888	0.807	0.909	0.939	0.962
94	0.422	0.317	0.366	0.116	0.492	0.395	0.802	0.883	0.739
95	0.74	0.816	0.777	0.634	0.898	0.742	0.826	0.916	0.948
96	0.797	0.86	0.828	0.712	0.906	0.828	0.913	0.919	0.961
97	0.829	0.868	0.848	0.736	0.904	0.843	0.933	0.941	0.97
98	0.82	0.874	0.847	0.74	0.944	0.876	0.927	0.934	0.966
99	0.786	0.722	0.754	0.544	0.825	0.748	0.907	0.943	0.947
100	0.771	0.866	0.817	0.708	0.964	0.786	0.816	0.921	0.943
101	0.154	0.232	0.189	0.044	0.558	0.205	0.368	0.674	0.441
102	0.522	0.326	0.413	0.135	0.375	0.279	0.744	0.941	0.854
103	0.278	0.191	0.23	0.044	0.292	0.234	0.8	0.884	0.607
104	0.755	0.816	0.785	0.641	0.876	0.784	0.895	0.908	0.95
105	0.748	0.68	0.713	0.485	0.732	0.686	0.938	0.912	0.952
106	0.786	0.799	0.793	0.633	0.936	0.784	0.838	0.935	0.929
107	0.794	0.741	0.767	0.568	0.835	0.696	0.833	0.942	0.942
108	0.732	0.742	0.737	0.547	0.874	0.614	0.703	0.942	0.915
109	0.846	0.873	0.859	0.75	0.937	0.831	0.887	0.945	0.966
110	0.815	0.771	0.793	0.611	0.859	0.752	0.876	0.947	0.952
111	0.656	0.691	0.673	0.465	0.76	0.666	0.876	0.882	0.91
112	0.816	0.713	0.763	0.544	0.822	0.723	0.879	0.955	0.955
113	0.749	0.724	0.737	0.534	0.851	0.751	0.882	0.91	0.946
114	0.831	0.804	0.817	0.656	0.834	0.781	0.937	0.942	0.962
115	0.69	0.831	0.757	0.629	0.869	0.765	0.88	0.867	0.945
116	0.729	0.573	0.646	0.37	0.615	0.522	0.849	0.95	0.922
117	0.869	0.766	0.816	0.625	0.795	0.686	0.862	0.972	0.968
118	0.781	0.825	0.803	0.663	0.883	0.801	0.907	0.932	0.955
119	0.751	0.744	0.748	0.557	0.802	0.714	0.89	0.913	0.943
120	0.797	0.71	0.752	0.534	0.832	0.667	0.802	0.947	0.948
121	0.78	0.602	0.685	0.413	0.598	0.563	0.942	0.96	0.963
122	0.754	0.82	0.786	0.645	0.912	0.794	0.871	0.903	0.955
123	0.88	0.775	0.826	0.64	0.84	0.788	0.938	0.968	0.981
124	0.561	0.77	0.657	0.506	0.854	0.681	0.798	0.807	0.898
125	0.762	0.777	0.769	0.598	0.907	0.755	0.832	0.917	0.939
126	0.533	0.737	0.627	0.462	0.873	0.651	0.746	0.788	0.897
127	0.75	0.807	0.778	0.628	0.867	0.814	0.939	0.904	0.95
128	0.597	0.373	0.472	0.176	0.415	0.388	0.935	0.958	0.909
129	0.568	0.698	0.63	0.44	0.87	0.669	0.769	0.839	0.86
130	0.788	0.825	0.807	0.666	0.89	0.76	0.854	0.928	0.951
131	0.806	0.835	0.821	0.685	0.922	0.793	0.859	0.943	0.95
132	0.849	0.831	0.84	0.699	0.901	0.809	0.898	0.953	0.964
133	0.841	0.903	0.871	0.786	0.933	0.863	0.925	0.94	0.968
134	0.538	0.487	0.512	0.249	0.686	0.566	0.825	0.874	0.824
135	0.796	0.848	0.822	0.697	0.92	0.804	0.874	0.929	0.951
136	0.34	0.59	0.448	0.264	0.705	0.558	0.791	0.672	0.823
137	0.735	0.721	0.728	0.525	0.797	0.667	0.836	0.912	0.938
138	0.801	0.864	0.832	0.719	0.901	0.842	0.934	0.928	0.958
139	0.873	0.822	0.847	0.697	0.873	0.782	0.896	0.962	0.97
140	0.807	0.744	0.775	0.576	0.818	0.739	0.903	0.943	0.961
141	0.694	0.553	0.62	0.343	0.768	0.573	0.745	0.933	0.906
142	0.732	0.785	0.758	0.595	0.862	0.77	0.894	0.905	0.931
143	0.797	0.833	0.815	0.679	0.874	0.746	0.853	0.936	0.949
144	0.525	0.645	0.582	0.376	0.796	0.632	0.794	0.802	0.874
145	0.75	0.771	0.76	0.586	0.866	0.762	0.88	0.907	0.957
146	0.809	0.815	0.812	0.661	0.891	0.78	0.875	0.942	0.954
147	0.809	0.818	0.813	0.665	0.833	0.765	0.918	0.943	0.954
148	0.507	0.433	0.469	0.203	0.524	0.405	0.773	0.852	0.857
149	0.757	0.861	0.807	0.695	0.943	0.807	0.856	0.909	0.946
150	0.836	0.847	0.842	0.713	0.914	0.837	0.916	0.942	0.968
151	0.838	0.79	0.814	0.642	0.894	0.806	0.901	0.944	0.965
152	0.783	0.65	0.713	0.464	0.671	0.627	0.935	0.94	0.96
153	0.659	0.659	0.659	0.434	0.805	0.584	0.725	0.921	0.863
154	0.685	0.823	0.751	0.617	0.89	0.736	0.827	0.869	0.937
155	0.695	0.772	0.732	0.565	0.915	0.622	0.68	0.913	0.893
156	0.825	0.783	0.804	0.63	0.851	0.742	0.872	0.943	0.958
157	0.84	0.762	0.8	0.61	0.857	0.686	0.8	0.968	0.964
158	0.851	0.746	0.797	0.594	0.728	0.679	0.933	0.972	0.971
159	0.775	0.872	0.822	0.717	0.946	0.824	0.871	0.916	0.95
160	0.778	0.734	0.756	0.555	0.821	0.775	0.943	0.939	0.948
161	0.538	0.52	0.529	0.275	0.691	0.592	0.857	0.842	0.867
162	0.77	0.778	0.774	0.603	0.822	0.73	0.888	0.928	0.936
163	0.792	0.814	0.803	0.654	0.87	0.803	0.923	0.928	0.949
164	0.433	0.484	0.458	0.222	0.656	0.459	0.7	0.806	0.808
165	0.591	0.616	0.603	0.371	0.785	0.584	0.744	0.867	0.878
166	0.657	0.579	0.617	0.357	0.649	0.491	0.757	0.912	0.885
167	0.777	0.743	0.759	0.564	0.825	0.707	0.857	0.951	0.928
168	0.825	0.726	0.774	0.562	0.814	0.743	0.913	0.951	0.964
169	0.79	0.73	0.76	0.555	0.844	0.715	0.847	0.948	0.939
170	0.711	0.653	0.681	0.444	0.72	0.583	0.809	0.94	0.914
171	0.592	0.38	0.475	0.181	0.538	0.344	0.639	0.942	0.842
172	0.57	0.684	0.624	0.427	0.826	0.622	0.754	0.831	0.87
173	0.679	0.654	0.666	0.436	0.8	0.721	0.901	0.886	0.934
174	0.811	0.85	0.83	0.706	0.939	0.81	0.862	0.942	0.957
175	0.788	0.705	0.745	0.525	0.726	0.696	0.958	0.936	0.955
176	0.822	0.752	0.786	0.591	0.763	0.713	0.935	0.954	0.956
177	0.558	0.365	0.451	0.164	0.425	0.35	0.825	0.948	0.852
178	0.81	0.817	0.813	0.664	0.901	0.809	0.898	0.935	0.957
179	0.716	0.757	0.736	0.558	0.864	0.794	0.919	0.889	0.936
180	0.401	0.309	0.352	0.109	0.567	0.23	0.407	0.878	0.715
181	0.459	0.464	0.461	0.214	0.603	0.542	0.898	0.806	0.829
182	0.7	0.634	0.666	0.422	0.733	0.586	0.8	0.914	0.915
183	0.697	0.698	0.698	0.487	0.807	0.71	0.88	0.896	0.918
184	0.84	0.722	0.779	0.562	0.817	0.698	0.854	0.96	0.957
185	0.747	0.71	0.728	0.517	0.744	0.671	0.902	0.919	0.942
186	0.809	0.793	0.801	0.635	0.884	0.753	0.851	0.938	0.951
187	0.714	0.661	0.687	0.454	0.86	0.637	0.741	0.915	0.911
188	0.545	0.573	0.559	0.32	0.732	0.562	0.768	0.85	0.851
189	0.803	0.879	0.84	0.739	0.932	0.85	0.912	0.926	0.961
190	0.637	0.73	0.682	0.498	0.76	0.736	0.968	0.855	0.926
191	0.8	0.681	0.738	0.502	0.772	0.692	0.897	0.947	0.952
192	0.64	0.642	0.641	0.412	0.714	0.567	0.794	0.892	0.89
193	0.577	0.348	0.448	0.156	0.41	0.357	0.871	0.949	0.899
194	0.822	0.739	0.779	0.576	0.867	0.737	0.85	0.944	0.957
195	0.742	0.664	0.702	0.466	0.718	0.644	0.897	0.937	0.932
196	0.598	0.512	0.553	0.283	0.599	0.471	0.787	0.887	0.878
197	0.6	0.522	0.56	0.292	0.691	0.525	0.76	0.92	0.837
198	0.851	0.811	0.831	0.674	0.899	0.786	0.875	0.965	0.953
199	0.732	0.804	0.767	0.616	0.848	0.72	0.849	0.902	0.932
200	0.733	0.621	0.675	0.419	0.691	0.575	0.832	0.95	0.925
201	0.82	0.726	0.772	0.56	0.838	0.75	0.894	0.945	0.959
202	0.813	0.845	0.829	0.7	0.903	0.838	0.928	0.94	0.955
203	0.767	0.74	0.753	0.557	0.877	0.745	0.85	0.932	0.925
204	0.812	0.764	0.788	0.602	0.823	0.732	0.89	0.947	0.945
205	0.78	0.847	0.813	0.688	0.916	0.791	0.864	0.922	0.95
206	0.79	0.62	0.7	0.434	0.734	0.63	0.858	0.947	0.954
207	0.845	0.821	0.833	0.683	0.879	0.796	0.905	0.951	0.967
208	0.815	0.71	0.761	0.54	0.777	0.63	0.811	0.967	0.95
209	0.844	0.841	0.842	0.708	0.875	0.812	0.929	0.952	0.966
210	0.59	0.412	0.493	0.203	0.533	0.447	0.84	0.913	0.879
211	0.786	0.779	0.783	0.61	0.826	0.753	0.912	0.934	0.943
212	0.568	0.416	0.486	0.202	0.482	0.312	0.648	0.958	0.854
213	0.83	0.847	0.838	0.71	0.892	0.829	0.929	0.941	0.963
214	0.512	0.477	0.494	0.236	0.563	0.473	0.84	0.83	0.883
215	0.755	0.698	0.726	0.507	0.745	0.632	0.849	0.932	0.932
216	0.828	0.87	0.848	0.738	0.914	0.81	0.886	0.943	0.954
217	0.163	0.225	0.191	0.043	0.549	0.192	0.349	0.656	0.49
218	0.897	0.847	0.871	0.738	0.876	0.849	0.97	0.97	0.984
219	0.784	0.67	0.725	0.486	0.8	0.674	0.842	0.941	0.953
220	0.759	0.751	0.755	0.567	0.834	0.758	0.909	0.921	0.948
221	0.746	0.851	0.797	0.679	0.925	0.818	0.884	0.905	0.949
222	0.702	0.679	0.69	0.469	0.783	0.665	0.85	0.894	0.933
223	0.529	0.569	0.548	0.312	0.73	0.585	0.801	0.813	0.878
224	0.82	0.826	0.823	0.68	0.904	0.819	0.906	0.932	0.963
225	0.622	0.636	0.629	0.4	0.749	0.599	0.799	0.869	0.901
226	0.802	0.754	0.778	0.587	0.839	0.751	0.896	0.94	0.953
227	0.507	0.541	0.524	0.283	0.762	0.558	0.732	0.807	0.866
228	0.762	0.591	0.671	0.397	0.656	0.597	0.909	0.969	0.932
229	0.799	0.786	0.793	0.623	0.86	0.779	0.906	0.934	0.959
230	0.642	0.608	0.625	0.38	0.764	0.626	0.82	0.885	0.889
231	0.787	0.693	0.738	0.511	0.824	0.728	0.883	0.946	0.937
232	0.849	0.885	0.867	0.768	0.914	0.856	0.936	0.947	0.966
233	0.688	0.811	0.747	0.605	0.928	0.767	0.827	0.884	0.931
234	0.688	0.821	0.751	0.617	0.939	0.712	0.758	0.869	0.935
235	0.802	0.796	0.799	0.636	0.884	0.793	0.897	0.947	0.949
236	0.704	0.572	0.635	0.363	0.795	0.53	0.667	0.952	0.889
237	0.587	0.489	0.536	0.262	0.643	0.501	0.779	0.898	0.833
238	0.519	0.374	0.441	0.165	0.608	0.381	0.627	0.932	0.777
239	0.588	0.751	0.664	0.499	0.879	0.703	0.799	0.837	0.896
240	0.738	0.798	0.767	0.612	0.876	0.741	0.847	0.908	0.937
241	0.691	0.715	0.703	0.502	0.814	0.714	0.878	0.885	0.936
242	0.835	0.744	0.788	0.586	0.883	0.746	0.844	0.955	0.962
243	0.5	0.428	0.463	0.198	0.507	0.419	0.826	0.871	0.839
244	0.88	0.815	0.847	0.69	0.885	0.8	0.904	0.968	0.97
245	0.802	0.678	0.738	0.5	0.808	0.692	0.857	0.952	0.952
246	0.838	0.846	0.842	0.712	0.868	0.793	0.914	0.952	0.952
247	0.479	0.503	0.491	0.247	0.645	0.525	0.814	0.826	0.813
248	0.677	0.763	0.718	0.548	0.845	0.728	0.861	0.872	0.93
249	0.533	0.62	0.575	0.357	0.737	0.528	0.716	0.812	0.865
250	0.848	0.837	0.843	0.706	0.915	0.839	0.917	0.944	0.972
251	0.534	0.67	0.598	0.4	0.837	0.61	0.728	0.827	0.825
252	0.678	0.642	0.66	0.424	0.786	0.71	0.903	0.895	0.921
253	0.674	0.74	0.706	0.522	0.858	0.662	0.772	0.88	0.912
254	0.659	0.561	0.608	0.341	0.731	0.577	0.79	0.918	0.893
255	0.75	0.844	0.795	0.671	0.897	0.786	0.877	0.904	0.946
256	0.828	0.798	0.813	0.649	0.846	0.768	0.908	0.949	0.957
257	0.601	0.583	0.592	0.345	0.727	0.549	0.754	0.88	0.885
258	0.703	0.692	0.697	0.482	0.81	0.525	0.648	0.937	0.872
259	0.622	0.629	0.625	0.393	0.818	0.597	0.73	0.901	0.859
260	0.772	0.807	0.789	0.637	0.852	0.791	0.929	0.92	0.95
261	0.854	0.829	0.841	0.697	0.909	0.834	0.917	0.95	0.969
262	0.643	0.704	0.673	0.473	0.841	0.74	0.879	0.857	0.921
263	0.547	0.547	0.547	0.299	0.664	0.512	0.771	0.838	0.863
264	0.814	0.856	0.835	0.715	0.912	0.777	0.852	0.935	0.954
265	0.556	0.558	0.557	0.311	0.784	0.55	0.702	0.877	0.883
266	0.815	0.833	0.824	0.686	0.908	0.824	0.907	0.937	0.955
267	0.533	0.611	0.57	0.349	0.863	0.584	0.677	0.839	0.825
268	0.25	0.144	0.19	0.027	0.275	0.139	0.504	0.897	0.603
269	0.832	0.791	0.811	0.641	0.9	0.769	0.855	0.955	0.946
270	0.668	0.697	0.682	0.476	0.837	0.669	0.799	0.882	0.912
271	0.703	0.601	0.65	0.391	0.736	0.571	0.776	0.932	0.932
272	0.774	0.671	0.72	0.483	0.724	0.606	0.838	0.948	0.935
273	0.524	0.438	0.479	0.21	0.52	0.409	0.786	0.863	0.863
274	0.68	0.71	0.695	0.494	0.835	0.677	0.811	0.877	0.936
275	0.855	0.86	0.858	0.738	0.897	0.84	0.937	0.952	0.967
276	0.851	0.882	0.866	0.764	0.916	0.842	0.919	0.951	0.967
</code>
</pre>
</details>

# 終わりに
「機械学習による鋳鉄の黒鉛形状の分類」<sup>(3)</sup>のまねごとをするための準備として、このようなプログラムを作成しました。

# 参考文献
(1) Gomes, O. F. M. and Paciornik, S., Automatic Classification of Graphite in Cast Iron, Microscopy and Microanalysis, 11 (4), 2005, pp.363-371.
(2) V. Chaloupková, T. Ivanova* and V. Krepl, Particle size and shape characterization of feedstock material for biofuel production, Agronomy Research 17(5), 2019, pp.1861–1873.
(3) 斎藤, 機械学習による鋳鉄の黒鉛形状の分類, 新潟県工業技術総合研究所サイト.
http://www.iri.pref.niigata.jp/topics/R3/3kin3.html