アルゴリズムのステップ:
図1に示すように、グレースケール画像の画像を取得します
図2に示すように、小箱(4×4/8×8/10×10など)の設計、小ブロック内の各画素の統計値
図3に示すように、0〜255のグレー値を複数のレベルに分割され、その結果が設定された各第2段階の処理レベルにマッピングされ、カウント
図4は、グレースケールまでの各ブロック内の全ての画素を見つけるために、これらの画素の平均値が得られます
元の画素値を置き換える5、統計的平均アウト
CV2インポート インポートnumpyのAS NP IMG = cv2.imread(' ./Nature.jpg '、1 ) imgInfo = img.shape 高さ = imgInfo [ 0 ] 幅 = imgInfo [ 1 ] グレー = cv2.cvtColor(IMG、cv2.COLOR_BGR2GRAY ) DST = np.zeros((高さ、幅、3 )、np.uint8) pixel_class = 4 sectionTop = INT(256 / pixel_class) 画像データを反復する各ループのため#2の使用 のために Iで(レンジ3、高さ- 。3 ): のために J で(レンジ3、幅- 。3 ): #現在のグレーレベルは、プログラムで定義されている4 位、4つのレベルの画素数をロードするために配列を定義 ARRAY1 = np.zeros(pixel_class、np.uint8) #現在の小ブロックがプログラムの6×6で定義されている ため、M に範囲( - 3、3。 ) のための N- における範囲( - 3、3。 ): #P1が画素であります添字0で表される点分割レベルのセグメント、 - 。3 P1 =INT(グレー[IはMを+、N-J +] / sectionTop) 画素数の#次のレベル、添え字は、配列1の画素レベルを表し、 小ブロック内の画素の画素レベルの代表値の番号# ARRAY1 [P1] = ARRAY1 [P1] + 。1 #次のこの小さなボックスまでのピクセルセグメント内の画素を決定 CurrentMax =配列1 [ 0 ] L = 0 #1までの記録画素アレイセグメントカウントのために本明細書に提供されます添え字 のための K における範囲(0 :、pixel_class) IF CurrentMax < 配列1 [K]: CurrentMax = 配列1 [K] L = K #は、治療を意味 Uは= V = W = 0 のための M における範囲( - 3、3 ) 用のn における範囲( - 3、3 ) 場合灰色[iが+ M、J + N]> =(1- *部)とグレー[I + M、J + N <=((L + 1)* セクション): (B、G、R)は = IMG [I + M、J + n]は 、U + = bは V + = G W + = R U = INT(U /配列1 [L]) V = INT(V / 配列1 [L]) W = INT(W / 配列1 [L]) DST [I、J] = [U、V、W] cv2.imshow(' DST ' 、DST ) cv2.imshow(' IMG ' 、IMG) cv2.waitKey(0 ) cv2.destroyAllWindows() cv2.imwrite(' RoseOilPainting.png '、DST)