HOGのOpencvで学習ノートを実現し、画像特徴抽出ノート-自用

8801 ワード

HOGのOpencvで学習ノートを実現し、画像特徴抽出ノート-自用

# Specify the parameters for our HOG descriptor

# Cell Size in pixels (width, height). Must be smaller than the size of the detection window
# and must be chosen so that the resulting Block Size is smaller than the detection window.
cell_size = (6, 6)

# Number of cells per block in each direction (x, y). Must be chosen so that the resulting
# Block Size is smaller than the detection window
num_cells_per_block = (2, 2)

# Block Size in pixels (width, height). Must be an integer multiple of Cell Size.
# The Block Size must be smaller than the detection window
block_size = (num_cells_per_block[0] * cell_size[0],
              num_cells_per_block[1] * cell_size[1])

# Calculate the number of cells that fit in our image in the x and y directions
x_cells = gray_image.shape[1] // cell_size[0]
y_cells = gray_image.shape[0] // cell_size[1]

# Horizontal distance between blocks in units of Cell Size. Must be an integer and it must
# be set such that (x_cells - num_cells_per_block[0]) / h_stride = integer.
h_stride = 1

# Vertical distance between blocks in units of Cell Size. Must be an integer and it must
# be set such that (y_cells - num_cells_per_block[1]) / v_stride = integer.
v_stride = 1

# Block Stride in pixels (horizantal, vertical). Must be an integer multiple of Cell Size
block_stride = (cell_size[0] * h_stride, cell_size[1] * v_stride)

# Number of gradient orientation bins
num_bins = 9        


# Specify the size of the detection window (Region of Interest) in pixels (width, height).
# It must be an integer multiple of Cell Size and it must cover the entire image. Because
# the detection window must be an integer multiple of cell size, depending on the size of
# your cells, the resulting detection window might be slightly smaller than the image.
# This is perfectly ok.
win_size = (x_cells * cell_size[0] , y_cells * cell_size[1])

# Print the shape of the gray scale image for reference
print('
The gray scale image has shape: '
, gray_image.shape) print() # Print the parameters of our HOG descriptor print('HOG Descriptor Parameters:
'
) print('Window Size:', win_size) print('Cell Size:', cell_size) print('Block Size:', block_size) print('Block Stride:', block_stride) print('Number of Bins:', num_bins) print() # Set the parameters of the HOG descriptor using the variables defined above hog = cv2.HOGDescriptor(win_size, block_size, block_stride, cell_size, num_bins) # Compute the HOG Descriptor for the gray scale image hog_descriptor = hog.compute(gray_image)

なお、使用前にRGBピクチャを階調マップに変換する必要がある理由は、
  • 物体を識別し、最も重要な要素は勾配(SIFT/HOG)であり、勾配はエッジを意味し、これは最も本質的な部分であり、勾配を計算するには、自然に階調画像が用いられ、階調を画像の強度と理解することができる.
  • 色は、光の影響を受けやすく、重要な情報を提供することが困難であるため、画像を階調化するとともに、特徴抽出の速度を速めることができる.

  • 学習転送ゲート:HOG特徴抽出アルゴリズム実践編-Histograms of Oriented Gradients(HOG)画像処理の特徴抽出モード識別の特徴抽出アルゴリズムHOG特徴(Histogram of Gradient)学習総括画像ノイズ除去古典アルゴリズム(平均フィルタリング、ガウスフィルタリング、二重フィルタリング、中値フィルタDoG(Difference of Gaussian)角点検出OpenCV-Python--第27章:SURF特徴点抽出アルゴリズム