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 | 画像シフトに対する感度を下げるためにパターンをシャッフルします。 |
演算子
patternとsignatureの両方のデータ型は、ユークリッド距離の <-> 演算子をサポートしています。 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;