All Products
Search
Document Center

PolarDB:imgsmlr

Last Updated:Jul 02, 2025

imgsmlr adalah ekstensi pihak ketiga yang didukung oleh PolarDB for Oracle untuk pencarian gambar serupa. imgsmlr memanfaatkan transformasi wavelet Haar untuk mengekstraksi nilai fitur gambar dari berbagai format file gambar termasuk PNG dan GIF dan mengambil gambar serupa dengan menggunakan indeks.

Prasyarat

Fitur ini didukung pada kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle) yang menjalankan PolarDB for PostgreSQL (Kompatibel dengan Oracle) 2.0 (versi revisi 2.0.14.18.0 atau lebih baru).

Catatan

Anda dapat menjalankan pernyataan berikut untuk memeriksa versi revisi kluster PolarDB for Oracle:

SHOW polar_version;

Penggunaan

Tipe Data

imgsmlr menyediakan tipe data pattern dan signature.

Tipe Data

Panjang

Catatan Penggunaan

pattern

16388 byte

Hasil transformasi wavelet Haar dari gambar.

signature

64 byte

Representasi pendek dari pattern untuk pencarian cepat menggunakan indeks GiST.

Fungsi

imgsmlr menyediakan fungsi untuk mengonversi berbagai jenis gambar ke dalam tipe pattern. Fungsi ini juga mendukung pembuatan signatures untuk patterns guna keperluan pencarian.

Fungsi

Tipe data nilai kembali

Deskripsi

jpeg2pattern(bytea)

pattern

Mengonversi tipe gambar dari JPEG ke pattern.

png2pattern(bytea)

pattern

Mengonversi tipe gambar dari PNG ke pattern.

gif2pattern(bytea)

pattern

Mengonversi tipe gambar dari GIF ke pattern.

pattern2signature(pattern)

signature

Membuat signature untuk gambar bertipe pattern.

shuffle_pattern(pattern)

pattern

Mengacak pola agar kurang sensitif terhadap pergeseran gambar.

Operator

Kedua tipe data pattern dan signature mendukung operator <-> untuk menghitung jarak Euclidean. Tipe data signature juga mendukung pengindeksan GiST pada operator <->.

Operator

Tipe data operand kiri

Tipe data operand kanan

Tipe data nilai kembali

Deskripsi

<->

pattern

pattern

float8

Menghitung jarak Euclidean antara dua gambar bertipe pattern.

<->

signature

signature

float8

Menghitung jarak Euclidean antara dua gambar bertipe signature.

Contoh

Buat ekstensi imgsmlr

CREATE EXTENSION imgsmlr;

Buat tabel nilai fitur gambar

Dalam contoh ini, sebuah tabel bernama image berisi kolom id dan data. Kolom data berisi data biner gambar JPEG. Jalankan pernyataan SQL berikut untuk membuat tabel yang berisi patterns dan signatures dari gambar yang ditentukan.

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 gambar serupa

Untuk mencari 10 gambar teratas yang paling mirip dengan gambar tertentu berdasarkan id, jalankan subquery untuk mendapatkan 100 gambar teratas berdasarkan signature menggunakan indeks GiST. Kemudian jalankan query luar untuk mendapatkan 10 gambar teratas berdasarkan pattern dari hasil subquery.

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 ekstensi

DROP EXTENSION imgsmlr;