All Products
Search
Document Center

PolarDB:imgsmlr (citra serupa)

Last Updated:Nov 11, 2025

Ekstensi imgsmlr adalah ekstensi pihak ketiga untuk PolarDB for PostgreSQL dan yang mendukung pencarian citra serupa. Ekstensi imgsmlr menggunakan algoritma transformasi wavelet Haar untuk mengambil nilai fitur dari citra, seperti file PNG dan GIF. Ekstensi ini kemudian menggunakan indeks untuk mengambil citra serupa.

Lingkup

Versi PolarDB for PostgreSQL yang didukung:

  • PostgreSQL 16 (versi mesin minor 2.0.16.9.8.0 atau lebih baru)

  • PostgreSQL 14 (versi mesin minor 14.10.18.0 atau lebih baru)

Catatan

Anda dapat melihat versi mesin minor di Konsol atau menjalankan pernyataan SHOW polardb_version;. Jika kluster Anda tidak memenuhi persyaratan versi mesin minor, lakukan peningkatan versi mesin minor.

Cara Penggunaan

Tipe data

Ekstensi imgsmlr menyediakan dua tipe data: pattern dan signature.

Tipe Data

Ukuran penyimpanan

Deskripsi

pattern

16388 byte

Hasil transformasi wavelet Haar pada sebuah citra.

signature

64 byte

Representasi ringkas dari sebuah pattern. Indeks GiST dapat digunakan untuk pencarian cepat.

Fungsi

Ekstensi imgsmlr menyediakan sejumlah fungsi yang dapat digunakan untuk mengonversi berbagai jenis citra ke tipe pattern. Ekstensi ini juga menyediakan fungsi untuk membuat signature dari pattern guna mempermudah pengambilan.

Fungsi

Tipe pengembalian

Deskripsi

jpeg2pattern(bytea)

pattern

Mengonversi citra JPEG ke tipe pattern.

png2pattern(bytea)

pattern

Mengonversi citra PNG ke tipe pattern.

gif2pattern(bytea)

pattern

Mengonversi citra GIF ke tipe pattern.

pattern2signature(pattern)

signature

Membuat signature dari sebuah pattern.

shuffle_pattern(pattern)

pattern

Mengacak sebuah pattern untuk mengurangi sensitivitas terhadap offset citra.

Operator

Tipe pattern dan signature keduanya mendukung operator <-> untuk Jarak Euclidean. Selain itu, tipe signature juga mendukung indeks GiST pada operator <->.

Operator

Tipe Lvalue

Tipe R-value

Tipe pengembalian

Deskripsi

<->

pattern

pattern

float8

Menghitung Jarak Euclidean antara dua pattern.

<->

signature

signature

float8

Menghitung Jarak Euclidean antara dua signature.

Contoh

Instal ekstensi

CREATE EXTENSION imgsmlr;

Buat tabel untuk nilai fitur citra

Asumsikan terdapat tabel image yang berisi kolom id dan kolom data. Kolom data berisi data biner JPEG. Anda dapat menjalankan pernyataan SQL berikut untuk membuat tabel yang berisi pattern dan signature untuk citra-citra tersebut.

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
);

Buat indeks GiST

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

Cari citra serupa

Untuk menemukan 10 citra teratas yang paling serupa dengan citra yang memiliki id tertentu, gunakan subkueri. Subkueri memanfaatkan indeks GiST pada signature untuk mengambil 100 citra kandidat teratas. Query luar kemudian mencari di antara kandidat-kandidat tersebut berdasarkan pattern untuk menemukan 10 kecocokan terbaik.

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;

Hapus instalasi ekstensi

DROP EXTENSION imgsmlr;