2次元配列におけるピーク検出とは
ピーク検出は、2次元配列内で局所的な極大値や極小値を見つけるプロセスです。このアルゴリズムは、画像処理や信号処理などのさまざまな分野で使用されています。ピークは、周囲の要素よりも大きい(または小さい)値を持つ要素として定義されます。
ピーク検出アルゴリズムの種類
ピーク検出にはさまざまなアプローチがありますが、代表的なものには以下のようなものがあります。
1. 単純なピーク検出
単純なピーク検出アルゴリズムは、各要素がその周囲の要素よりも大きい(または小さい)かどうかを確認する方法です。
def simple_peak_detection(matrix): peaks = [] for i in range(1, len(matrix) - 1): for j in range(1, len(matrix[0]) - 1): if matrix[i][j] > matrix[i-1][j] and matrix[i][j] > matrix[i+1][j] and matrix[i][j] > matrix[i][j-1] and matrix[i][j] > matrix[i][j+1]: peaks.append((i, j)) return peaks # Example usage matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(simple_peak_detection(matrix))
2. 2次元配列のピーク検出
2次元配列のピーク検出アルゴリズムは、各要素がその上下左右の要素よりも大きい(または小さい)かどうかを確認します。
def peak_detection_2d(matrix): peaks = [] for i in range(len(matrix)): for j in range(len(matrix[0])): is_peak = True for x, y in [(0, 1), (0, -1), (1, 0), (-1, 0)]: if 0 <= i + x < len(matrix) and 0 <= j + y < len(matrix[0]) and matrix[i][j] <= matrix[i + x][j + y]: is_peak = False break if is_peak: peaks.append((i, j)) return peaks # Example usage matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(peak_detection_2d(matrix))
3. 山と谷のピーク検出
山と谷のピーク検出アルゴリズムは、各要素がその上下左右の要素よりも大きい(または小さい)かつその対角要素よりも大きい(または小さい)かどうかを確認します。
def peak_detection_valley(matrix): peaks = [] for i in range(1, len(matrix) - 1): for j in range(1, len(matrix[0]) - 1): if matrix[i][j] > matrix[i-1][j] and matrix[i][j] > matrix[i+1][j] and matrix[i][j] > matrix[i][j-1] and matrix[i][j] > matrix[i][j+1] and matrix[i][j] > matrix[i-1][j-1] and matrix[i][j] > matrix[i-1][j+1] and matrix[i][j] > matrix[i+1][j-1] and matrix[i][j] > matrix[i+1][j+1]: peaks.append((i, j)) return peaks # Example usage matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(peak_detection_valley(matrix))
これらのアルゴリズムを使って、2次元配列内のピークを検出することができます。ピーク検出は、画像処理や信号処理などのさまざまな応用で重要な役割を果たします。