Python ヒストグラム、イコライゼーション、ガウス フィルタリング
Python ビデオ チュートリアル #)#元の画像のテスト
ヒストグラム
基本原理
ヒストグラムとは: 画像のヒストグラム 画像のグレー レベル間の関係を説明します。対応するグレー レベルが画像内に現れる回数 (頻度) ヒストグラムを通じて、画像の分割、検索、分類などの操作を実行できます。matplotlib ライブラリの
hist 関数: hist 関数はヒストグラムの描画に役立ちます。多くのパラメーターがあり、ここでは最初の 2 つのパラメーター (x、bins) が使用されます。 x パラメータは、ピクセルの 1 次元配列を表します。配列が 2 次元以上の場合は、 flatten メソッドを使用して 1 次元に平坦化できます。一般に、画像の読み取りは 2 次元行列であるため、平坦化が必要です。 bins パラメーターは、ヒストグラムを表示する列の数を示します。
2 次元配列 img=[[159,120,130],[100,84,92],[168,150,212]] があると仮定します。数字は画像のピクセル値を表しており、平坦化後は img=[159,120,130,100,84,92,168,150,212] となり、hist 関数を使って描画したヒストグラムは以下のようになります。横軸はピクセル値を表し、縦軸はピクセル値の出現頻度を表します。
opencv が提供する cv2.calcHist() はヒストグラムを描画します
: The calcHist関数は、読み取った Image イメージを渡す必要があります。イメージのチャネル (グレースケール イメージの場合はチャネル = 0、r、g、b チャネルの場合はそれぞれ 0、1、2 が渡されます)。
ヒストグラムを描画するための matplotlib ライブラリ
教科書コードfrom PIL import Imagefrom pylab import *# 解决中文乱码plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False#im = array(Image.open('headimage.jpeg').convert('L')) # 打开图像,并转成灰度图像print(im)figure()subplot(121)gray()contour(im, origin='image') #画图axis('equal') # 自动调整比例axis('off') # 去除x y轴上的刻度title(u'图像轮廓')subplot(122)# flatten()函数可以执行展平操作,返回一个一维数组hist(im.flatten(), 128)print(im.flatten())title(u'图像直方图')plt.xlim([0,260])plt.ylim([0,11000])show()
RGB 3 チャネルのヒストグラム
コードの実装import cv2from matplotlib import pyplot as plt
img = cv2.imread('headimage.jpeg',1)color = ('b','g','r')for i,col in enumerate(color):
histr = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])plt.show()
ヒストグラムの等化
#基本原理
ヒストグラムイコライゼーションとは: ヒストグラムイコライゼーションは、画像のヒストグラムを使用してコントラストを調整する、画像強調手法の一種です。画像から直観的に、均等化された画像はコントラストが強く、より鮮明で、より明らかな特徴を持ち、ヒストグラムからは、均等化された画像のヒストグラム グレー値の頻度がより均一であることがわかります。
ヒストグラムを均等化する方法:
ヒストグラムの均等化では、最初に画像 img を読み取り、画像 imhist のヒストグラム値を計算する必要があります (ヒストグラムを使用できます)関数)。 ヒストグラムの値を取得した後、ヒストグラムの累積ヒストグラム cdf を計算する必要があります (cdf[i] は imhist[0] から imhist[i] の合計に等しく、これは取得できます) Cumsum 関数を直接使用します)。
PCV ライブラリがヒストグラム等化を完了しました
教科書コード# -*- coding: utf-8 -*-from PIL import Imagefrom pylab import *from PCV.tools import imtools# 添加中文字体支持from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)im = array(Image.open('Python の宿題: ヒストグラム、イコライゼーション、ガウス フィルタリング').convert('L')) # 打开图像,并转成灰度图像im2, cdf = imtools.histeq(im)figure()subplot(2, 2, 1)axis('off')gray()title(u'原始图像', fontproperties=font)imshow(im)subplot(2, 2, 2)axis('off')title(u'直方图均衡化后的图像', fontproperties=font)imshow(im2)subplot(2, 2, 3)axis('off')title(u'原始直方图', fontproperties=font)hist(im.flatten(), 128, density=True)subplot(2, 2, 4)axis('off')title(u'均衡化后的直方图', fontproperties=font)hist(im2.flatten(), 128, density=True)show()
実行結果を取得できます元の画像は全体的に暗い (黒) ため、元の画像のヒストグラムは低ピクセルでは頻繁に表示され、高ピクセルではあまり表示されません。ヒストグラム均等化後、画像全体が明るくなり、ヒストグラムを観察すると、低画素の頻度が減少し、高画素の頻度が増加し、画像のコントラストがより明確になっていることがわかります。
ガウス フィルタリング
##基本原理
ガウス フィルタリングとは: ガウス フィルタリングは、正規分布を使用する線形平滑化フィルタです。画像処理はガウス ノイズの除去に適しており、画像をぼかして滑らかにし、画像にぼやけた効果を与えることができます。
高斯滤波原理:高斯滤波是用户指定一个模板,然后通过这个模板对图像进行卷积,所进行的卷积操作就是将模板中心周围的像素值进行加权平均后替换模板中心的像素值
opencv高斯滤波实现
代码实现
import cv2import matplotlib.pyplot as plt im=cv2.imread("Python の宿題: ヒストグラム、イコライゼーション、ガウス フィルタリング")# 高斯滤波img_Guassian = cv2.GaussianBlur(im,(5,5),0)plt.subplot(121)plt.imshow(im)plt.subplot(122)plt.imshow(img_Guassian)plt.show()
Python の宿題: ヒストグラム、イコライゼーション、ガウス フィルタリング
从Python の宿題: ヒストグラム、イコライゼーション、ガウス フィルタリング中可以看出,经过高斯滤波后的图像变得模糊了,边缘变得没有那么明显,图像变得平滑
相关免费学习推荐:python教程(视频)
以上がPython の宿題: ヒストグラム、イコライゼーション、ガウス フィルタリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。