AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 174730
Accepted
user32421
user32421
Asked: 2017-05-27 23:27:29 +0800 CST2017-05-27 23:27:29 +0800 CST 2017-05-27 23:27:29 +0800 CST

Salvando pixels em imagens em um banco de dados

  • 772

Trabalho com cientistas que analisam imagens. Essas imagens têm um número limitado de cores e um componente principal de sua análise é entender como os pixels específicos são distribuídos dentro de cada imagem. Então basicamente o que eu preciso guardar para uma análise completa é a posição e a cor de cada um dos pixels. As imagens que preciso processar são coisas semelhantes a estas:

imagem de amostra

Observe que as formas geralmente não são quadrados ou retângulos, mas podem ser de qualquer forma. No entanto, o que é sempre o caso é que:

  • Há uma cor de fundo que dominará 60-90% da imagem
  • Existem apenas 6 cores diferentes em uso
  • As imagens variam em tamanho de 100x100 pixels a 1500x1000 pixels

Estaremos processando centenas de milhares de imagens. Então, isso rapidamente se tornará enorme se eu quiser armazenar a cor de cada pixel (imagens grandes têm 1,5 milhão de pixels). Eu não lidei com bancos de dados desse tamanho antes, nem lidei com o armazenamento de dados de pixel de imagens, então eu queria saber se você pode dar algum conselho em relação a:

  • Recomendações de banco de dados (favorecendo o PostgreSQL, mas qualquer solução de código aberto pode ser considerada)
  • Truques para armazenar os dados sem que as coisas se tornem tão grandes

Uma coisa que estou pensando é armazenar a cor de fundo principal para cada imagem, e dessa forma eu só tenho que armazenar os pixels que NÃO são a cor de fundo. Ajudaria, mas gostaria de saber se há mais que pode ser feito ...

database-design
  • 1 1 respostas
  • 1017 Views

1 respostas

  • Voted
  1. Best Answer
    joanolo
    2017-05-28T00:16:05+08:002017-05-28T00:16:05+08:00

    Bancos de dados relacionais não são especialmente bons para armazenar informações que você diria "têm uma estrutura muito variável".

    Uma estrutura totalmente normalizada provavelmente representaria uma imagem do seu tipo com duas tabelas:

    1. um parapictures (picture_id,background_color)
    2. e outro para non_background_pixels_of_pictures (picture_id, x, y, color).

    Mas isso provavelmente consumiria muito espaço e seria inconveniente para o processamento de imagens. Tudo depende de que tipo de "consultas" você faria e quais ferramentas usaria.

    Alternativas (baseadas no PostgreSQL):

    1. Armazene uma referência a um arquivo de imagem padrão (o caminho do arquivo). Se isso for feito para fins "científicos", acho que você deseja um formato de armazenamento sem perdas. Isso permitirá usar muitas bibliotecas ou programas que trabalham diretamente com formatos de imagem padrão (TIFF, JPEG, PNG, ...).
    2. Armazene o formato de dados de imagem padrão como dados binários (um "blob", usando o byteatipo no PostgreSQL, por exemplo; ou o Large Objects Facility ).
    3. Use alguns tipos ou extensões específicos para imagens .

    Por exemplo, com certas versões do PostgreSQL, você pode usar:

    uma. PostPic:

    PostPic é uma extensão para os dbms PostgreSQL de código aberto que permite o processamento de imagens dentro do banco de dados, como o PostGIS faz para dados espaciais. Adiciona o novo tipo 'imagem' ao SQL, e várias funções para processar imagens e extrair seus atributos.

    b. PostgreSQL-IE

    [...] Para facilitar o desenvolvimento de novos sistemas CBIR, propomos uma extensão de tratamento de imagens para o sistema gerenciador de banco de dados relacional (RDBMS) PostgreSQL. Essa extensão, chamada PostgreSQL-IE, é independente da aplicação e oferece a vantagem de ser open source e portátil. O sistema proposto estende as funcionalidades da linguagem de consulta estruturada SQL com novas funções que são capazes de criar novos procedimentos de extração de características, novos vetores de características como combinações de características previamente definidas e novos métodos de acesso, bem como compor consultas de similaridade. O PostgreSQL-IE disponibiliza um novo tipo de dados de imagem, que permite a associação de várias imagens com um determinado atributo de imagem único.

    NOTA: esta parece ter sido uma tese de doutorado ou algum outro programa de pesquisa... de 2006. Confira também sua página de download .

    c. pg_image , um tipo de dados de imagem bitmap para imagens JPEG e PNG.

    Esta extensão fornece um tipo de dados IMAGE para armazenamento de imagens bitmap, que verifica se os dados da imagem estão em um formato reconhecido (PNG ou JPEG) e fornece funções de acesso para os metadados da imagem (formato, largura, altura), bem como os dados da imagem em si. Os recursos planejados incluem conversão entre formatos, corte e dimensionamento, anotação com texto e composição de várias imagens. Depende da biblioteca GD para carregamento e manipulação de imagens. Compatível com PostgreSQL 9.2 e 9.3beta2.

    NOTA: Parece que não está sendo mantido.

    Outras referências:

    • Armazenando imagens no PostgreSQL @ Stack Overflow. Ele fornece uma explicação muito boa da abordagem byteavs.large objects
    • Sistema de arquivos vs. Postgres para imagens .
    • Armazenar Imagens no Banco de Dados
    • Armazene, manipule e analise dados raster dentro do banco de dados espacial PostgreSQL/PostGIS
    • 1

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve