Eu vejo o espaço de cores do HSV usado em todo o lugar: para rastreamento, detecção humana, etc ... Estou me perguntando, por que? O que é esse espaço de cores que o torna melhor do que usar RGB?
Eu vejo o espaço de cores do HSV usado em todo o lugar: para rastreamento, detecção humana, etc ... Estou me perguntando, por que? O que é esse espaço de cores que o torna melhor do que usar RGB?
Respostas:
A resposta simples é que, diferentemente do RGB , o HSV separa o luma , ou a intensidade da imagem, do chroma ou das informações de cores. Isso é muito útil em muitas aplicações. Por exemplo, se você deseja fazer a equalização do histograma de uma imagem colorida, provavelmente deseja fazê-lo apenas no componente de intensidade e deixe os componentes de cor em paz. Caso contrário, você obterá cores muito estranhas.
Na visão computacional, muitas vezes você deseja separar os componentes de cores da intensidade por vários motivos, como robustez às mudanças de iluminação ou remoção de sombras.
Observe, no entanto, que o HSV é um dos muitos espaços de cores que separam a cor da intensidade (consulte YCbCr, laboratório etc.). O HSV é frequentemente usado simplesmente porque o código para conversão entre RGB e HSV está amplamente disponível e também pode ser facilmente implementado. Por exemplo, a Image Processing Toolbox for MATLAB inclui funções rgb2hsv
e hsv2rgb
.
As informações de cores geralmente são muito mais barulhentas que as informações de HSV.
Deixe-me dar um exemplo: eu e alguns amigos estávamos envolvidos em um projeto que tratava do reconhecimento de sinais de trânsito em vídeos de cenas reais (ruídos, sombras e às vezes oclusão presentes). Era parte de um projeto maior, portanto, tivemos tempo para experimentar abordagens diferentes para esse problema específico (e reutilizar abordagens antigas). Não tentei me basear em cores, mas lembro-me de uma informação interessante: _O componente RGB dominante em um sinal de STOP geralmente não era vermelho! (principalmente devido a sombras)
Geralmente, você pode obter melhores informações em um espaço de cores HSV . Deixe-me tentar dar um exemplo de experiência pessoal novamente: tente imaginar que você tem uma imagem de um plano de cor única com uma sombra nele. No espaço de cores RGB, a parte da sombra provavelmente terá características muito diferentes da parte sem sombras. No espaço de cores HSV, é mais provável que o componente de matiz de ambos os patches seja semelhante: a sombra influenciará principalmente o valor , ou talvez o componente de satuação , enquanto o matiz , indicando a "cor" primária (sem brilho e diluição do branco) / preto) não deve mudar muito.
Se essas explicações não lhe parecerem intuitivas, sugiro:
tente e veja as razões pelas quais esses tipos de representação de cores foram desenvolvidos: é sempre, de alguma forma, baseado em alguma visão da interpretação humana da cor
por exemplo, as crianças não gostam de objetos com valor == altamente colorido , eles preferem objetos altamente saturados , objetos em que a cor é intensa e não diluída
depois de conseguir isso e desenvolver alguma intuição, você deve brincar com imagens: tente decompor várias imagens em seus componentes RGB e HSV
Seu objetivo seria ver e entender a diferença nessas decomposições para imagens que contenham sombras, iluminação forte, reflexão da luz.
se você tem um tipo específico de imagens com as quais gosta de brincar, tente decompô-las: quem sabe, talvez o RGB seja realmente mais adequado às suas necessidades do que o HSV :)
Usar apenas o componente Hue torna o algoritmo menos sensível (se não invariável) às variações de iluminação.
Outra opção popular é o espaço de cores LAB, onde os canais AB representam a cor e as distâncias euclidianas no espaço AB combinam melhor com a percepção humana da cor. Mais uma vez, ignorar o canal L (Luminância) torna o algoritmo mais robusto às diferenças de iluminação.
A melhor resposta que posso descobrir é: RGB tem a ver com "detalhes de implementação" em relação à maneira como o RGB exibe cores, e HSV tem a ver com os componentes "reais". Outra maneira de dizer que isso seria RGB é a maneira como os computadores tratam as cores, e o HSV tenta capturar os componentes da maneira como os seres humanos percebem as cores.
Vou elaborar:
A cor é uma percepção baseada em ondas eletromagnéticas. As propriedades naturais dessas ondas são, por exemplo, intensidade e frequência. Se varrermos a frequência de uma onda de luz do infravermelho para o ultravioleta, perceberemos visualmente uma variação de cores ao longo das cores do arco-íris. As cores do arco-íris podem ser consideradas "cores puras" porque são representadas por ondas de frequência única.
Agora, o olho humano pode apenas responder, ou "ressoar" a três freqüências principais de luz, não surpreendentemente vermelhas, verdes e azuis. O fato é que essa resposta é não linear, de modo que a retina pode distinguir uma determinada cor pura (e implicitamente sua "frequência") pela resposta combinada dos três componentes de cor .
O espaço de cores RGB existe como tal apenas para imitar o funcionamento interno de nossa retina, de modo que uma grande maioria de cores pode ser representada nos monitores de computador por meio de uma cor conveniente (do ponto de vista do computador) de 24 bits por pixel codificação. O espaço de cores RGB não tem relação intrínseca às propriedades naturais das cores, nem à interpretação humana das cores.
Por exemplo, qualquer operação aritmética realizada em canal no espaço RGB (por exemplo, geração de gradientes de cores) fornece resultados muito brutos ou claramente "errados". É por isso que é recomendável criar mapas de cores convertendo as paradas de cores de RGB em outros espaços de cores (HLS, Lab etc.), executando as interpolações e convertendo os valores interpolados novamente em RGB.
Espero que isto ajude!
HSV significa Hue-Saturation-Value. Na verdade, é um tipo de representação do plano de cores (como RGB, YCbCr etc.).
É um formato de representação de cores independente do dispositivo: A representação de cores HSV é útil para detectar tipos de cores específicos, por exemplo: cor da pele, cor do fogo etc.
Matlab
função para converter uma imagem RGB em plano HSV é rgb2hsv('/inputimage_name')
.
Vou te dar um exemplo para entender. Como a nossa mão tem muitas partes da palma da mão, palma da mão traseira e abaixo dela. podemos ver diferentes variações de cores nessas áreas, mas o matiz para todas essas regiões não varia muito, portanto, o valor do matiz pode ser útil na segmentação manual.
Não há nada que eu saiba que seja especialmente melhor com o HSV em comparação com o YUV ou o LAB que o tornaria melhor para a extração de recursos e invariância ou visualização da iluminação. Eu acho que o HSV é o mais comum por causa de convenções e continuidade: é mais fácil comparar resultados e se comunicar se os dois usarem o mesmo espaço de cores.
Com isso dito, o HSV (em oposição ao RGB) é usado na visão computacional por 2 razões que conheço:
Como outros mencionados, é benéfico separar a luma do croma. A luma varia bastante na cena com base na quantidade de luz que cai sobre o objeto. O croma, por outro lado, se correlaciona melhor com as propriedades intrínsecas do objeto e, para imagens adequadamente com equilíbrio de branco, é mais ou menos invariável.
No entanto, gostaria de acrescentar que HSV, HSL, ou de fato qualquer espaço de cor com parametrização polar do plano de croma, são más escolhas para esse fim. Isso ocorre porque eles introduzem uma singularidade na linha dos cinzas (que matiz é cinza?), Tornando-os muito sensíveis ao ruído e ao balanço de branco. Além disso, comparar duas cores em um sistema de coordenadas polares não é tão simples. Observe também que nem o valor no HSV nem a luminosidade no HSL correspondem à luminosidade percebida pelo homem ou a qualquer outra medida física de energia.
Existem muitos espaços de cores lineares que oferecem a mesma separação luma-croma e preservam a linearidade (YCbCr, YUV) ou modelam a visão humana adequadamente (LUV, LAB). Com eles, você pode comparar duas cores usando uma norma Euclidean L2 em suas cromaticidades, resultando em um algoritmo mais robusto em geral.
Por que HSV / HSL são usados com tanta frequência então? Difícil de dar uma resposta objetiva. Pela minha experiência, isso se deve principalmente à ignorância e à disponibilidade das rotinas de conversão RGB-> HSV. Tinha que trabalhar com código cujos autores não entendiam correção de gama, muito menos espaços de cores diferentes. O código visto que converteu RGB em HSV segmentou a imagem com base no matiz, desconsiderando o fato de ser uma quantidade modular. Acho que podemos concordar que essas não foram decisões conscientes apoiadas por qualquer motivo.