前提・実現したいこと
深度画像から輪郭線画像を作りたいのですが、
1、深度画像を44画素の小ブロックから成る画像に変換する
2、44画素の深度値の中、その最大値と最小値を求める
3、求めた差が閾値より大きい場合は小ブロック中の画素はすべて輪郭線であると判定する
という手順で画像を導きたいと思っています。
画像を読み取り、4*4画素を1ブロックとして同じ色で塗り低解像度画像にすることはできたのですが、そこから画素値を読み取り判定を決めるところでよく分かりません。
次のプログラムは画像を低解像度画像を求めるときに利用したプログラムです。
これを一部変更して輪郭線画像を作りたいと思っています。
該当のソースコード
import numpy as np import matplotlib.pyplot as plt import cv2 from skimage import io img_orig = io.imread('IMG_0072.jpeg') plt.imshow(img_orig) plt.show()
def pool_max(img, ksize_h=16, ksize_w=16): _img = img.copy().astype(np.float32) # padding h, w = img.shape[:2] outer_h = h % ksize_h pad_top = outer_h // 2 pad_bottom = outer_h - pad_top outer_w = w % ksize_w pad_left = outer_w // 2 pad_right = outer_w - pad_left _img = np.pad(_img, [(pad_top, pad_bottom), (pad_left, pad_right), (0, 0)], 'edge') out = np.zeros_like(_img) new_h, new_w = out.shape[:2] c = 1 if len(out.shape) == 2 else out.shape[2] # filtering for iy in range(0, new_h, ksize_h): for ix in range(0, new_w, ksize_w): for ic in range(c): out[iy : iy + ksize_h, ix : ix + ksize_w, ic] = _img[iy : iy + ksize_h, ix : ix + ksize_w, ic].max() out = out[pad_top : pad_top + h, pad_left : pad_left + w] return np.clip(out, 0, 255).astype(np.uint8) img_pool = pool_max(img_orig) # pooling plt.figure(figsize=(12, 3)) plt.subplot(1, 2, 1) plt.title('input') plt.imshow(img_orig) plt.subplot(1, 2, 2) plt.title('answer') plt.imshow(img_pool) plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 14:58