1.フィルタータイプ
空間および周波数領域フィルターは、一般に、ローパス、ハイパス、バンドストップ、およびバンドパスフィルターの4種類のフィルターに分けられます。
ローパスフィルター:低周波数の詳細のみを通過させ、高周波数の詳細を減衰させます。例:平滑化フィルター。
ハイパスフィルター:高周波数の詳細のみを通過させ、低周波数の詳細を減衰させます。例:マスクフィルターをシャープにします。
バンドストップフィルター:特定の周波数範囲内の信号を減衰させます。特定のしきい値を下回り、別のしきい値を超える周波数は通過できます。
バンドパスフィルター:特定の周波数帯域内の信号のみを通過させ、しきい値を下回る周波数と別のしきい値を超える周波数を減衰させます。
2.ゾーンプレートを生成します
ゾーンプレートは、フィルターの特性をテストするために使用されます。ゾーンプレートにはいくつかのバージョンがありますが、使用するバージョンは次のように生成できます。ここで、x、yは0.0275のステップで[-8.2、8.2]に属し、結果として597x597の画像になります。
Pythonリファレンスコード
def zone(x, y):
return 0.5 * (1 + math.cos(x * x + y * y))
SIZE = 597
image = np.zeros((SIZE, SIZE))
start = -8.2
end = 8.2
step = 0.0275
def dist_center(y, x):
global SIZE
center = SIZE / 2
return math.sqrt( (x - center)**2 + (y - center)**2)
for y in range(0, SIZE):
for x in range(0, SIZE):
if dist_center(y, x) > 300:
continue
y_val = start + y * step
x_val = start + x * step
image[y, x] = zone(x_val, y_val)
ゾーンプレートの写真
3.ゾーンプレートにローパスフィルターを適用します
Pythonリファレンスコード
kernel_size = 15
lowpass_kernel_gaussian = gkern(kernel_size)
lowpass_kernel_gaussian = lowpass_kernel_gaussian / lowpass_kernel_gaussian.sum()
lowpass_kernel_box = np.ones((kernel_size, kernel_size))
lowpass_kernel_box = lowpass_kernel_box / (kernel_size * kernel_size)
lowpass_image_gaussian = cv2.filter2D(image, -1, lowpass_kernel_gaussian)
lowpass_image_box = cv2.filter2D(image, -1, lowpass_kernel_box)
サンプル画像
4.ゾーンプレートにハイパスフィルターを適用します
空間領域では、画像自体からローパスフィルター処理された画像を差し引くことにより、ハイパスフィルター処理された画像(アンシャープマスクなど)を取得できます。
Pythonリファレンスコード
highpass_image_gaussian = image - lowpass_image_gaussian
highpass_image_gaussian = np.absolute(highpass_image_gaussian)
highpass_image_box = image - lowpass_image_box
highpass_image_box = np.absolute(highpass_image_box)
サンプル画像
5.ゾーンプレートにバンドストップフィルターを適用します
同様に、バンドストップフィルター処理された画像は、ローパスフィルター処理された画像とハイパスフィルター処理された画像を(異なるしきい値で)追加することによって取得できます。
Pythonリファレンスコード
bandreject_image = lowpass_image_gaussian + highpass_image_box
サンプル画像
6.ゾーンプレートにバンドパスフィルターを適用します
一方、バンドパスフィルター処理された画像は、画像自体からバンドストップフィルター処理された画像を差し引くことによって取得できます。
Pythonリファレンスコード
bandpass_image = image - bandreject_image
bandpass_image = np.absolute(bandpass_image)
サンプル画像