pythonの画像クラスタリングは達成します

ビデオプロジェクトは、クラスタリングを使用した後、前ENVIで達成されているので、今のpythonの下で学びたいです。
小さなクラスタープロジェクト:この1を学びます

輸入CV2の
PLTのインポートなどmatplotlib.pyplot
NPとしてインポートnumpyの

====== ======準備

原画像パス

imPath = 'C:\ Users \ユーザーLP \デスクトップ\のphoto.jpg'

画像を読みます

起源= cv2.imread(imPath)

画像はグレースケールに変換します

起源= cv2.cvtColor(起源、cv2.COLOR_BGR2GRAY)

画像サイズ

Hは、W = origin.shapeの
印刷( "元の画像サイズである:{} * {}"形式(H、W))

ズーム倍率を設定し、スケーリング係数の度合いも大きく、強いです

アルファ= INT(入力( "\ nはスケーリング係数を入力してください。"))

画像のスケーリング

INT = newH(H /アルファ)
neww = INT(W /アルファ)
プリント( "\ n個の画像サイズをスケーリングした後:{} * {}"形式(newH、neww))
原点= cv2.resize(原点、(neww 、newH))

設定は、いくつかのカテゴリに分類されます

numOfClass = INT(入力( "\ n個の色分類番号:"))

反復の最大数を設定します

roundForLoop = INT(入力( "\の nは反復の最大数を定義:"))
を印刷()

====== ======クラスタ

印刷( "---- ----スタートクラスタリング")

中心点を初期化するアリコートの最大値と最小間隔numOfClass

= origin.max valueArange() - origin.min()
中心点の値を格納するためのkeyValueList = []#1 numOfClass

iについての範囲(1、numOfClass + 1):
keyValueList.append(valueArange / numOfClass * I / 2)

クラスタ更新keyValueList

flagMatrix = np.zeros((newH、newW))

範囲(roundForLoop)におけるRについて:

for row in range(newH):

    for col in range(newW):

        temp = []

        for i in range(numOfClass):
            temp.append(np.abs(origin[row, col] - keyValueList[i]))

        # 获得该像素点最近的类
        index = temp.index(min(temp))
        # 存入flag矩阵
        flagMatrix[row, col] = index

# 更新keyValueList
temp = np.zeros(numOfClass)
ct = np.zeros(numOfClass)

for row in range(newH):

    for col in range(newW):
        temp[int(flagMatrix[row, col])] += origin[row, col]
        ct[int(flagMatrix[row, col])] += 1

for i in range(numOfClass):
    keyValueList[i] = temp[i] / ct[i]

print("完成 : {} / {}".format(r + 1, roundForLoop))

スケーリングされた処理対象の表示画像

plt.subplot(121)
plt.imshow(原点)
plt.title( "起源イメージ")

表示クラスタリング結果

plt.subplot(122)
plt.imshow(flagMatrix)
plt.title( "結果1イメージnRound \ = {} \ nclass = {}"形式(roundForLoop、numOfClass))
plt.show()

反復:
1、クラスタリングは、各画素を通る反復プロセスであり、各素子の各画素との差分を計算するクラスからの画素へのより近く示すkeyValueList、差の絶対値が小さいほどです。その最も近いクラスからこの要素に戻るにはなっております。
2.全ての画素を通過した後、画素は各カテゴリーの平均値を必要とkeyValueListに対応する要素の値を更新し、反復を完了すること。ローから要素画像ピクセルの各クラスの平均を表すハイに長分類番号のkeyValueList収納スペース、。
図3は、最終的には行列の各要素は、元のカテゴリ内の画素位置に対応し、同じサイズフラグマトリックスの画像を取得します。
図4に示すように、フラグ出力行列は、クラスタリングにより得られた分類結果が得られます。

おすすめ

転載: blog.51cto.com/14421854/2415763