質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

831閲覧

輪郭線画像の作成を行いたい

hinata_aaabbc

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/24 07:27

編集2020/11/24 07:32

前提・実現したいこと

深度画像から輪郭線画像を作りたいのですが、
1、深度画像を44画素の小ブロックから成る画像に変換する
2、4
4画素の深度値の中、その最大値と最小値を求める
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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現在.max()で小ブロックを塗りつぶしているところで、.max()から.min()を引いたら差が出てきて判定できる、という話かと思いました。

投稿2020/11/25 15:55

gasbombe

総合スコア204

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinata_aaabbc

2020/11/26 14:58

確かにそうですね! .max()が出せているので、.min()で求めることも出来ますね。 取り組んでみます。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問