全部產品
Search
文件中心

PolarDB:imgsmlr(近似映像)

更新時間:Oct 15, 2025

imgsmlrPolarDB PostgreSQL版支援的一款第三方外掛程式,支援相似Image Search功能。imgsmlr外掛程式基於Haar小波變換演算法,能夠提取png、gif等類型映像特徵值,並通過索引檢索相似的映像。

適用範圍

支援的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 16(核心小版本2.0.16.9.8.0及以上)

  • PostgreSQL 14(核心小版本14.10.18.0及以上)

說明

您可在控制台查看核心小版本號碼,也可以通過SHOW polardb_version;語句查看。如未滿足核心小版本要求,請升級核心小版本

使用方法

資料類型

imgsmlr外掛程式提供了兩種資料類型,分別為patternsignature

資料類型

儲存大小

說明

pattern

16388 位元組

對映像進行Haar小波變換的結果。

signature

64 位元組

pattern的簡短表示,可以使用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,降低對映像位移的敏感度。

運算子

patternsignature類型都支援歐幾裡德距離的<->運算子。signature還支援在<->運算子上使用GiST索引。

運算子

左實值型別

右實值型別

傳回型別

說明

<->

pattern

pattern

float8

計算兩個pattern類型映像的歐幾裡得距離。

<->

signature

signature

float8

計算兩個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張映像,可以在子查詢使用GiST索引通過signature選擇前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;