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).
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 10Hapus ekstensi
DROP EXTENSION imgsmlr;