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

PolarDB:imgsmlr (類似画像)

最終更新日:Nov 09, 2025

imgsmlr 拡張機能は、PolarDB for PostgreSQL および 用のサードパーティ拡張機能で、類似画像検索をサポートします。imgsmlr 拡張機能は、Haar ウェーブレット変換アルゴリズムを使用して、PNG や GIF ファイルなどの画像から特徴値を取得します。その後、インデックスを使用して類似画像を取得します。

適用範囲

サポートされている PolarDB for PostgreSQL のバージョン:

  • PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.9.8.0 以降)

  • PostgreSQL 14 (マイナーエンジンバージョン 14.10.18.0 以降)

説明

コンソールでマイナーエンジンバージョンを表示するか、SHOW polardb_version; 文を実行します。クラスターがマイナーエンジンバージョンの要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。

使用方法

データの型

imgsmlr 拡張機能は、patternsignature の 2 つのデータの型を提供します。

データの型

ストレージサイズ

説明

pattern

16388 バイト

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

signature

64 バイト

パターンのコンパクトな表現。GiST インデックスを使用して高速検索ができます。

関数

imgsmlr 拡張機能は、いくつかの関数を提供します。これらの関数を使用して、さまざまな画像タイプを pattern 型に変換できます。この拡張機能は、取得を容易にするために pattern から signature を作成する関数も提供します。

関数

戻り値の型

説明

jpeg2pattern(bytea)

pattern

JPEG 画像を pattern 型に変換します。

png2pattern(bytea)

pattern

PNG 画像を pattern 型に変換します。

gif2pattern(bytea)

pattern

GIF 画像を pattern 型に変換します。

pattern2signature(pattern)

signature

pattern から signature を作成します。

shuffle_pattern(pattern)

pattern

pattern をシャッフルして、画像のオフセットに対する秘密度を減らします。

オペレーター

pattern 型と signature 型はどちらも、ユークリッド距離の <-> オペレーターをサポートしています。signature 型は、<-> オペレーターの GiST インデックスもサポートしています。

オペレーター

左辺値の型

R 値型

戻り値の型

説明

<->

pattern

pattern

float8

2 つの pattern 間のユークリッド距離を計算します。

<->

signature

signature

float8

2 つの signature 間のユークリッド距離を計算します。

拡張機能のインストール

CREATE EXTENSION imgsmlr;

画像特徴値のテーブルを作成する

image テーブルに id 列と data 列が存在すると仮定します。data 列には、バイナリ JPEG データが含まれています。次の SQL 文を実行して、画像の patternsignature を含むテーブルを作成できます。

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 件の画像を見つけるには、サブクエリを使用します。サブクエリは signature の GiST インデックスを使用して、上位 100 件の候補画像を取得します。次に、外部クエリがこれらの候補を pattern で検索し、上位 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;