Todos os produtos
Search
Central de documentação

PolarDB:imgsmlr (similar images)

Última atualização: Jun 28, 2026

A extensão imgsmlr adiciona a busca por imagens semelhantes ao PolarDB for PostgreSQL. Ela aplica a transformada wavelet de Haar para extrair valores de características das imagens e usa um índice GiST para recuperar resultados visualmente similares.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster do PolarDB for PostgreSQL executando uma das versões compatíveis:

    Versão do PostgreSQL

    Versão secundária mínima do mecanismo

    PostgreSQL 16

    2.0.16.9.8.0

    PostgreSQL 14

    14.10.18.0

    Para verificar a versão secundária do mecanismo, execute SHOW polardb_version; ou visualize a versão no console. Se o cluster não atender ao requisito de versão mínima, atualize a versão secundária do mecanismo antes de prosseguir.

Referência

Tipos de dados

Tipo de dado

Tamanho de armazenamento

Descrição

pattern

16388 bytes

Resultado da transformada wavelet de Haar aplicada a uma imagem

signature

64 bytes

Representação compacta de um pattern; compatível com índice GiST para buscas rápidas

Funções

Todas as funções *2pattern aceitam um argumento bytea com os dados binários brutos da imagem.

Função

Tipo de retorno

Descrição

jpeg2pattern(bytea)

pattern

Converte uma imagem JPEG para o tipo pattern

png2pattern(bytea)

pattern

Converte uma imagem PNG para o tipo pattern

gif2pattern(bytea)

pattern

Converte uma imagem GIF para o tipo pattern

pattern2signature(pattern)

signature

Crie uma signature a partir de um pattern

shuffle_pattern(pattern)

pattern

Embaralha um pattern para reduzir a sensibilidade a deslocamentos na imagem

Operadores

Os tipos pattern e signature aceitam o operador <-> para calcular a distância euclidiana. O tipo signature também permite criar um índice GiST em <-> para acelerar as buscas.

Operador

Tipo à esquerda

Tipo à direita

Tipo de retorno

Descrição

<->

pattern

pattern

float8

Distância euclidiana entre dois padrões

<->

signature

signature

float8

Distância euclidiana entre duas assinaturas

Primeiros passos

Instale a extensão

CREATE EXTENSION imgsmlr;

Crie uma tabela de características

O exemplo abaixo considera uma tabela image com uma coluna id e uma coluna data contendo dados binários JPEG. A consulta extrai um pattern embaralhado e uma signature para cada imagem e os armazena em uma nova tabela pat.

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

A função shuffle_pattern reduz a sensibilidade a pequenos deslocamentos posicionais nas imagens.

Crie um índice GiST

Adicione uma chave primária e um índice GiST na coluna signature para permitir a recuperação rápida de candidatos.

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

Busque imagens semelhantes

A consulta a seguir encontra as 10 imagens mais semelhantes àquela identificada por um determinado :id.

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;

A consulta interna usa o índice GiST em signature para recuperar eficientemente os 100 principais candidatos. A consulta externa reclassifica esses 100 candidatos com base na distância exata de pattern para retornar as 10 melhores correspondências. Ajuste ambos os valores de LIMIT para equilibrar velocidade e precisão da busca conforme sua coleção de imagens.

Desinstale a extensão

DROP EXTENSION imgsmlr;