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:
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 ...
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:
pictures (picture_id,background_color)
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):
bytea
tipo no PostgreSQL, por exemplo; ou o Large Objects Facility ).Por exemplo, com certas versões do PostgreSQL, você pode usar:
uma.
PostPic
:b. PostgreSQL-IE
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.
NOTA: Parece que não está sendo mantido.
Outras referências:
bytea
vs.large objects