すべてのプロダクト
Search
ドキュメントセンター

PolarDB:imgsmlr

最終更新日:Jan 23, 2025

imgsmlrは、類似のイメージ検索用に PolarDB for Oracleでサポートされているサードパーティの拡張機能です。 imgsmlrは、Haarウェーブレット変換を活用して、PNGやGIFなどのさまざまな形式の画像ファイルから画像特徴値を抽出し、インデックスを使用して類似画像を取得します。

前提条件

この機能は、PolarDB for PostgreSQL (Compatible with Oracle) 2.0 (リビジョンバージョン2.0.14.18.0以降) を実行するPolarDB for PostgreSQL (Compatible with Oracle) クラスターでサポートされています。

説明

次のステートメントを実行して、PolarDB for Oracleクラスターのリビジョンバージョンを表示できます。

SHOW polar_version;

使用法

データ型

imgsmlrは、patternおよびsignatureデータ型を提供します。

データ型

長さ

使用上の注意

pattern

16388バイト

画像のHaarウェーブレット変換結果。

signature

64バイト

GiSTインデックスを使用した高速検索のためのパターンの短い表現。

関数

imgsmlrは、さまざまなタイプの画像をパターンタイプに変換する機能を提供します。 また、検索目的でパターン署名を作成する機能も提供します。

関数

戻り値のデータ型

説明

jpeg2pattern(bytea)

pattern

画像タイプをJPEGからパターンに変換します。

png2pattern(bytea)

pattern

画像タイプをPNGからパターンに変換します。

gif2pattern(bytea)

pattern

画像タイプをGIFからパターンに変換します。

pattern2signature (パターン)

signature

パターンタイプの画像の署名を作成します。

shuffle_pattern (パターン)

pattern

画像シフトに対する感度を下げるためにパターンをシャッフルします。

演算子

patternsignatureの両方のデータ型は、ユークリッド距離の <-> 演算子をサポートしています。 signatureデータ型は、<-> 演算子でのGiSTインデックス作成もサポートしています。

演算子

左オペランドのデータ型

右オペランドのデータ型

戻り値のデータ型

説明

<->

pattern

pattern

float8

パターンタイプの2つの画像間のユークリッド距離を計算します。

<->

signature

signature

float8

署名タイプの2つの画像間のユークリッド距離を計算します。

imgsmlr拡張子の作成

CREATE EXTENSION imgsmlr;

イメージ特徴値テーブルの作成

この例では、imageという名前のテーブルにid列とdata列が含まれます。 データ欄には、JPEG画像のバイナリデータが格納されます。 次のSQL文を実行して、指定したイメージのパターンシグネチャを含むテーブルを作成します。

CREATE TABLE pat AS (
	SELECT
		id,
		shuffle_pattern(pattern) AS pattern,
		pattern2signature(pattern) AS signature
	FROM (
		SELECT
			id,
			jpeg2pattern(data) AS pattern
		FROM
			image
	) x
);

GiSTインデックスを作成する

ALTER TABLE pat ADD PRIMARY KEY (id);
CREATE INDEX pat_signature_idx ON pat USING gist (signature);

類似画像の検索

指定されたidの画像に最も類似している上位10画像をクエリするには、サブクエリを実行して、GiSTインデックスを使用して署名によって上位100画像をクエリします。 次に、外部クエリを実行して、サブクエリで見つかった画像から上位10の画像をパターンごとにクエリします。

SELECT
	id,
	smlr
FROM
(
	SELECT
		id,
		pattern <-> (SELECT pattern FROM pat WHERE id = :id) AS smlr
	FROM pat
	WHERE id <> :id
	ORDER BY
		signature <-> (SELECT signature FROM pat WHERE id = :id)
	LIMIT 100
) x
ORDER BY x.smlr ASC
LIMIT 10

拡張機能を削除する

DROP EXTENSION imgsmlr;