O MSI-sensor (Multispectral Imaging Sensor) é uma plataforma open-source de imagem multiespectral proximal por iluminação ativa sequencial: LEDs de banda estreita excitam a amostra a ; uma CMOS USB registra reflectância difusa ou, sob UV, autofluorescência endógena. Quatro bandas estão implementadas — , , e (firmware_v2 adiciona IR no GPIO4) — a USD 50–200, contra USD 30.000–150.000 de espectroscopia Vis-NIR–SWIR contínua. A hipótese é a mesma do sensoriamento remoto discreto, agora em bancada: se cada LED cair sobre um cromóforo ou fluoróforo conhecido, índices, Kubelka–Munk, PCA e textura GLCM bastam para contraste interpretável sem o cubo hiperespectral.
Neste post documentamos calibração radiométrica (dark frame), a transformação , os índices de solo (BI, CI, RI, IOI) e os resultados de uma sessão com bipartição espacial em CI/KM e PCA equilibrada (– –). No domínio microbiano, o pipeline label-free detecta e espacializa 44 colônias via MAI, Redox_Ratio e Diversity. Em carne, o dual UV–vermelho já produz mapas de contraste pigmento/gordura — precursor do Atomos de cinco bandas. Distinguimos o hardware vigente do design JCDE aspiracional (8 LEDs, –, PLSR/RF para SOC) e posicionamos o MSI-sensor como bancada de métodos espectrais replicáveis frente à plataforma irmã robótica.
Genealogia da linha: DIY 660+850 nm (precursor teórico, simulação) → MSI-sensor (este post: bancada de métodos) → Atomos MSI (SCARA + 5 bandas). O orçamento radiométrico do cabeçote LED é dimensionado no forward model de iluminação.
1. Problema e motivação científica
Métodos químicos úmidos e espectroscopia Vis-NIR–SWIR contínua predizem SOC (–), textura e óxidos de ferro com alta fidelidade, porém com custo e throughput incompatíveis com varredura densa em campo ou linha de abate. Sensores LED discretos trocam resolução espectral por seletividade física: cada é escolhida sobre um cromóforo ou fluoróforo conhecido (goethita , hematita e , excitação de ácidos húmicos , água ).
No semiárido brasileiro (Cerrado/Caatinga, Piauí), a biblioteca espectral estadual é densa em SWIR e pobre em Vis-NIR — lacuna que o manuscrito JCDE do projeto visa fechar. Em paralelo, a tipificação de carcaças (MAPA IN 9/2004) e a qualidade de carne demandam descritores objetivos de superfície; RGB de banda larga é insuficiente, HSI é caro. MSI proximal ocupa o meio-termo.
Formulamos quatro questões:
- Q1 — Um cubo de quatro bandas LED, com dark frame e normalização radiométrica relativa, reproduz índices clássicos de solo (brilho, coloração, óxidos) com contraste espacial interpretável?
- Q2 — Sob excitação UV/azul/verde, a autofluorescência endógena (NADH, FAD, porfirinas) permite detectar e espacializar colônias microbianas label-free?
- Q3 — O par UV–vermelho discrimina contraste mioglobina/gordura em carne via Kubelka–Munk e índices normalizados, como precursor do pipeline Atomos de cinco bandas?
- Q4 — Quais lições de calibração e interpretação (PIXL/SHERLOC; Ce³⁺ vs organics) transferem do sensoriamento planetário para solos tropicais ricos em fosfatos/REE?
O MSI-sensor é tratado como instrumento de aquisição e análise exploratória, não como espectrorradiômetro absoluto. Reflectâncias são relativas à sessão na implementação atual; PLSR de SOC permanece no roadmap.
Loading diagram…
2. Fundamentos: sensoriamento remoto proximal e espectroscopia
2.1 Iluminação ativa e aquisição sequencial
Em MSI orbital/aéreo, a fonte é o Sol e as bandas são filtros ou detectores sintonizados. Aqui a fonte é ativa e estreita: um LED por quadro elimina a necessidade de filtro sintonizável, ao custo de tempo de ciclo e da resposta espectral da câmera RGB/Bayer. O protocolo operacional é:
- Dark frame (todos os LEDs off);
- UV → azul → verde → vermelho ;
- Delay LED–câmera (configurável –);
- ROI opcional; exportação
frames/,figures/(PDF+PNG 300 DPI),metadata.json, CSV.
Os quatro quadros brutos abaixo ilustram o ponto de partida de qualquer sessão: a mesma cena sob quatro iluminantes. Em UV (), a textura do substrato aparece com contraste elevado e manchas escuras pontuais — regiões de forte absorção ou de emissão fraca no canal de detecção. Em azul () e verde (), a morfologia das mesmas manchas persiste, mas o fundo clareia, coerente com maior reflectância difusa no Vis. Em vermelho (), o campo torna-se mais homogêneo e as manchas perdem contraste relativo: o cromóforo que dominava o UV/azul contribui menos nessa banda. Essa persistência espacial com variação radiométrica é o que autoriza índices por razão e diferenças normalizadas — o objeto é o mesmo; o que muda é a interação luz–matéria.




2.2 Calibração radiométrica
Implementação atual (Smith & Milton, 1999, simplificado — sem painel branco obrigatório):
por default. O design JCDE especifica flat-field completo com referência:
PIXL (Mars 2020) reporta erro médio de 0,4% após modelar o perfil angular do LED — lição direta para repetibilidade PWM/duty no MSI-sensor.
2.3 Kubelka–Munk
Para meios ópticos opacos (solo, carne), a razão absorção/espalhamento é
com limitado a e a no código (linearidade falha acima de ; Torrent & Barrón, 1993).
2.4 Índices normalizados e PCA
A família genérica de diferenças normalizadas
une índices de vegetação/solo em RS e os índices UV–vermelho do MSI-sensor. A PCA sobre pixels válidos,
reduz o cubo a scores espaciais e loadings espectrais — análogo à compressão de cubos hiperespectrais.
2.5 UV: fluorescência, reflectância e o caveat Ce³⁺
Sob UV, o sinal misturado inclui reflectância e autofluorescência. O JCDE motiva para ácidos húmicos (emissão FA , HA ):
A revisão PIXL/SHERLOC alerta: luminescência 330–350 nm em Jezero correlaciona-se com Ce³⁺ em fosfatos, não necessariamente com organics. Em solos tropicais ricos em REE/fosfatos, fluorescência UV ≠ biologia sem contexto mineralógico (Q4).
3. Arquitetura do instrumento
3.1 Hardware implementado
| GPIO (ESP32-C3) | LED | nominal | Papel |
|---|---|---|---|
| 0 | Vermelho | Reflectância; CI, RI, IOI, carne | |
| 1 | UV | Reflectância + excitação de fluorescência | |
| 2 | Azul | NADH/FAD; goethita (~480) | |
| 3 | Verde | FAD; hematita (~530); SOC diagnóstico | |
| 4 (v2) | IR | (planejado) | Água/NIR; alinhamento futuro a 850 nm Atomos |
- MCU: ESP32-C3 SuperMini; PWM 1 kHz, 10 bit (0–1023); BLE
MSI-LED-UV. - Driver: S8050 NPN + 1 kΩ base → +5 V.
- Câmera: USB CMOS , ~90 µm/pixel a ~150 mm (JCDE).
3.2 Design JCDE (8 bandas — documento)
| (nm) | Alvo espectral |
|---|---|
| 365, 405 | Fluorescência húmica / PAH |
| 450, 525 | Goethita / hematita; SOC |
| 630, 660 | Vermelho / far-red |
| 850, 940 | Crystal-field Fe; água ~970 nm |
Metas de validação: RPD para SOC e Fe; acurácia textural USDA . Status: design e fundamentação; PLSR empírico TBD.
3.3 Firmware e software
| Camada | Stack |
|---|---|
| Firmware v1 | MicroPython + aioble (4 canais) |
| Firmware v2 | ESP-IDF 5.4.1 + NimBLE, OTA A/B, watchdog, CI |
| Apps | PySide6 + bleak + OpenCV + NumPy/SciPy/sklearn |
| Análise | soil_analyzer.py, microbial_soil_analyzer.py, meat_analyzer.py (source/legacy/) |
A assinatura espectral média (painel metodológico) resume o comportamento radiométrico típico ao longo das bandas discretas. O perfil exibe pico relativo no azul (), vale profundo no verde (–) — coerente com absorção de pigmentos (mioglobina em carne; óxidos/MO em solo) — e recuperação parcial no vermelho (), com tendência a cair de novo no NIR () quando essa banda está disponível. As barras de erro largas não são ruído de sensor apenas: refletem heterogeneidade espacial da amostra (manchas, textura, iluminação residual), o mesmo fenômeno que os mapas de índices espacializam.

Como a câmera é CMOS RGB com filtro Bayer, cada quadro LED é lido através de três canais de cor. As frações normalizadas , e mostram que o canal vermelho carrega a maior parte do contraste textural sob iluminação Vis, enquanto o verde contribui pouco à cromaticidade relativa e o azul ocupa posição intermediária. Essa assimetria importa metodologicamente: o “cubo multiespectral” do MSI-sensor não é monocromático por banda; é uma projeção da resposta LED filtrada pelo Bayer. Índices que misturam UV e vermelho herdam essa cadeia — daí a necessidade futura de correção de resposta espectral da câmera e, no design JCDE, de filtro IR-cut retrátil.

4. Protocolo de solo — índices e resultados
4.1 Índices clássicos (UV + vermelho)
| Índice | Fórmula | Referência / interpretação |
|---|---|---|
| BI | Brilho / umidade (Mathieu & Escadafal, 1998) | |
| CI | Coloração, óxidos (Escadafal, 1989) | |
| RI | Vermelhidão / hematita (Barrón & Torrent, 1986) | |
| IOI | Óxidos de ferro (Segal; Drury) | |
| A_UV | Pseudo-absorbância UV / MO | |
| KM_Diff | Contraste absorção UV vs Vis |
Estendidos em 4 bandas: BI4, NDVI_rg, VARI, ExG, GLI, NGRDI, Slope_VIS (regressão linear por pixel em 400–620 nm). Complementos: CIE L*a*b*, GLCM (Haralick), compositos RGB/CIR/UV-enhanced.
4.2 Sessão solo 4 bandas — leitura dos resultados
Cubo (soil_analysis_20260421_011221). O painel-resumo agrega bandas calibradas, índices, compositos, colorimetria e PCA numa única vista de sessão: é o artefato operacional que o analista inspeciona antes de exportar CSV. A amostra é escura em L* (), com a* positivo () e b* moderado () — tipicamente associada a solos ricos em óxidos/MO, não a areias claras.

Os seis mapas de índices clássicos respondem diretamente a Q1. O BI (média ) é baixo e pontilhado: o fundo claro com manchas escuras indica brilho global reduzido e heterogeneidade local — coerente com umidade superficial ou agregados escuros. O CI (média ) revela uma fronteira diagonal azul→vermelho: à esquerda/topo o UV domina relativamente (); à direita/base o vermelho domina (). Essa bipartição espacial não é artefato de um único pixel ruidoso — reaparece no KM_Diff (média ), com sinal oposto de UV vs vermelho nos mesmos hemisférios da cena. Em termos de sensoriamento remoto de solos áridos, CI e razões Red/UV são proxies de coloração e óxidos (Escadafal; Mathieu); aqui o MSI-sensor reproduz o mesmo formalismo em escala de bancada, com contraste espacial interpretável.
O RI (média ) e o IOI (média ) concentram valores altos à esquerda — “hot spots” de vermelhidão/óxido — e fundo baixo à direita. O desvio-padrão elevado do IOI é esperado: razões tornam-se instáveis quando (sombra, poro, LED fora do eixo). O mapa A_UV (média ) é mais homogêneo, com manchas de maior pseudo-absorbância no canto superior — candidato a enriquecimento local de matéria orgânica ou umidade, a validar quimicamente.

Os compositos falso-cor traduzem o cubo para leitura visual no estilo RS. O RGB (R=red, G=green, B=blue) mostra manchas vermelhas, verdes e azuis sobre fundo escuro — referência “aparente”. O análogo CIR (R=UV, G=red, B=green) realça estruturas que refletem/emitem no UV como se fossem o canal vermelho clássico de color-infrared. O UV-enhanced (B=UV) desloca o contraste para o azul. O painel KM ( por banda) é o mais discriminativo: magenta/ciano/laranja separam regiões por absorção relativa, não por brilho bruto — exatamente o papel da transformação Kubelka–Munk em meios opacos. O Red–UV Diff isola pontos de máximo contraste entre e , úteis para marcar anomalias pontuais (agregados, colônias, artefatos de sombra).


A PCA sobre os quatro canais confirma que a variância não colapsa num único eixo de brilho. PC1 explica , PC2 , PC3 , PC4 — distribuição relativamente equilibrada para , indicando que cada LED carrega informação não redundante. O mapa de scores PC1 é predominantemente próximo de zero, com hot spots positivos/negativos pontuais (anomalias espectrais locais). PC2 espacializa um padrão distinto (concentração de scores altos no topo-direita vs. baixos no inferior), sugerindo um segundo modo de variação — tipicamente textura/umidade ou uma segunda fase mineral — ortogonal ao primeiro. Em RS hiperespectral, PCA serve à compressão; aqui, com apenas quatro bandas, serve sobretudo a visualizar eixos de contraste antes de qualquer modelo supervisionado (PLSR) do roadmap JCDE.

5. Protocolo microbiano — autofluorescência
5.1 Índices de atividade (10)
Calibração , clip .
| Índice | Fórmula | Significado |
|---|---|---|
| MAI | Atividade metabólica NADH (Chance, 1979) | |
| FAD_Index | Razão FAD/NADH (Heikal, 2010) | |
| Redox_Ratio | Estado redox celular | |
| Porph_Index | Porfirinas / patógenos (Sahu, 2020) | |
| BFI | Biomassa fluorescente | |
| Viability | Viabilidade (Bhatt, 2015) | |
| Stress | Estresse (Surre, 2018) | |
| NDFI | Diferença normalizada | |
| Chl_Index | Cianobactérias / alga | |
| Diversity | (bandas) | Diversidade espectral |
Detecção espacial: Otsu + componentes conectados; área mínima 50 px; Clark–Evans .
5.2 Sessão microbiana — leitura dos resultados
Sessão microbial_analysis_20260421_005915 (ROI –). O painel-resumo organiza o argumento em três camadas, no mesmo espírito de um produto de RS: (i) bandas brutas de fluorescência/reflectância; (ii) índices bioquímicos espacializados; (iii) estatística populacional das colônias.
Na primeira linha, UV/azul/verde/vermelho mostram o mesmo campo pontilhado sob quatro excitação–detecção. A assinatura média da ROI tem máximo em () e mínimos relativos em e (), com barras de erro largas — heterogeneidade entre colônias e fundo, não apenas ruído eletrônico. Na segunda linha, o MAI destaca hot spots ciano/brancos sobre fundo escuro: candidatos a focos de atividade NADH. O Redox_Ratio (média ) exibe gradiente azul→vermelho na cena, sugerindo variação espacial do estado redox (FAD vs NADH), não um campo uniforme. O Porph_Index concentra speckles à esquerda — possível enriquecimento local de porfirinas, a interpretar com o caveat Ce³⁺/fosfatos quando o substrato for solo mineral. O mapa Diversity () é o mais texturizado: alta razão entre bandas marca pixels espectralmente “ricos”, tipicamente bordas de colônia ou misturas.
Na terceira linha, o histograma de tamanhos com é assimétrico à direita: a maioria das colônias é pequena (bin inicial), com cauda até áreas . Isso é coerente com crescimento colonial heterogêneo e com o limiar de área mínima (50 px) do detector Otsu+CC. Resposta a Q2: o pipeline label-free detecta e espacializa estruturas fluorescentes e deriva índices de atividade; a atribuição taxonômica/metabólica definitiva exige pareamento cultural ou molecular — fora do escopo desta sessão.

Isolando os mapas de atividade: o MAI opera como detector de contraste metabólico pontual; o Redox_Ratio como campo contínuo de estado oxidativo; a Diversity como mapa de heterogeneidade espectral. Juntos, argumentam que a informação útil não está só na média da ROI — está na geografia da fluorescência, análogo a mapas de índices de vegetação em RS, agora em escala milimétrica.



O mapa de fluorescência calibrada em UV () é a base radiométrica desses índices: após dark subtraction e normalização, as colônias aparecem como anomalias positivas sobre o substrato. O painel UV de análise (JCDE) contextualiza o mesmo formalismo — excitação UV e emissão Vis — no desenho de 8 bandas e na literatura de ácidos húmicos, reforçando que o hardware de 400 nm é um compromisso operacional em relação ao pico idealizado.


6. Protocolo de carne — dual UV–vermelho
Com apenas e :
| Índice | Fórmula | Interpretação |
|---|---|---|
| MMb_UV | Razão metmioglobina (proxy) | |
| Absorption_Red | Beer–Lambert no vermelho | |
| Fat_UV | Discriminação gordura/músculo | |
| UVR_ND | Contraste UV–vermelho (análogo NDI) | |
| KM_Diff | Diferencial Kubelka–Munk |
6.1 Sessão carne — leitura dos resultados
Sessão meat_analysis_20260417_164404 (). O painel-resumo é o argumento completo de Q3 em uma figura. Na base espectral, médio () supera (): a curva média desce de 400 para 620 nm — oposto ao perfil típico de músculo vermelho fresco saturado em OxiMb (que reflete mais no vermelho). Isso sugere superfície com contribuição de gordura/pele ou estado oxidado, e já condiciona a interpretação dos limiares Atomos calibrados em bovino.
Os mapas de absorbância em , Fat_UV, UVR_ND (NDMI no painel) e espacializam o contraste químico–óptico: regiões de maior coincidem com pigmento absorvente; Fat_UV e UVR_ND separam fases claras/escuras na textura do corte. A colorimetria CIE reforça a leitura: L* (relativamente claro), a* (forte componente vermelho–verde), b* , croma — amostra cromaticamente saturada, não cinza. O diagrama a*–b* concentra a nuvem de pixels no quadrante vermelho–amarelo típico de carne. Na PCA desta sessão dual-banda, PC1 explica e PC2 : com só duas bandas, quase toda a variância colapsa num eixo de contraste UV↔vermelho (estrutura tecido / pigmento), e PC2 captura residual fino (umidade local, sombra, textura).

O painel dedicado de índices de qualidade isola as fórmulas com valores médios por mapa — artefato de comunicação científica paralelo aos mapas de solo. Em conjunto: o dual UV–vermelho já produz descritores espacializados de contraste pigmento/gordura; não substitui as cinco bandas Atomos nem a partição Krzywicki, mas valida o MSI-sensor como bancada de método antes da integração robótica.

7. Enquadramento em sensoriamento remoto e ecossistema
Embora seja proximal de bancada, o MSI-sensor replica o paradigma de RS multiespectral discreto:
| Conceito RS | Instanciação MSI-sensor |
|---|---|
| Bandas estreitas | LEDs 400–620 nm (+ IR v2) |
| Índices de vegetação/solo | BI, CI, NDVI_rg, NDI, NDFI |
| Flat-field / dark | Dark frame; painel no design JCDE |
| PCA / textura | sklearn PCA; GLCM Haralick |
| Fluorescência UV | Pipeline microbiano; caveat Ce³⁺ (PIXL) |
Posição no ecossistema carcass_quality (e na série deste blog):
| Projeto | Papel |
|---|---|
| DIY 660+850 | Precursor histórico (só simulação; 2 bandas) |
| MSI-sensor | R&D open-source; métodos espectrais; firmware BLE |
| Atomos | Produto: SCARA + 5 bandas + análise em tempo real |
| Apex | Segmentação de gordura / pareamento de carcaça |
| msi-illumination | Forward model radiométrico do cabeçote LED |
| Aspecto | MSI-sensor | Atomos |
|---|---|---|
| UV | ||
| Vermelho | ||
| NIR | IR GPIO4 (v2) | |
| Robótica | Manual | SCARA + waypoint por pixel |
| Carne | 2 bandas, KM/MMb | 5 bandas, Krzywicki, freshness_class |
| Solo | 13 índices + PCA | PLSR/OSSL no backend |
8. Parâmetros do protocolo
| Parâmetro | Valor |
|---|---|
| Bandas implementadas | (+ IR v2) |
| Design JCDE | |
| PWM | 1 kHz, 10 bit; duty 0–100% via BLE |
| Câmera | USB CMOS |
| Delay LED–frame | (padrão) |
| Calibração atual | ; |
| ; clip | |
| Export | PNG/PDF 300 DPI + CSV + JSON |
| Stack | Python , PySide6, OpenCV, sklearn, bleak |
| Licença | MIT |
9. Limitações e validade
- Calibração relativa. Sem Spectralon/BaSO₄ sistemático, não é absoluto entre sessões.
- Design ≠ hardware. JCDE descreve 8 bandas e PLSR; o repo opera em 4 bandas; SOC não validado empiricamente.
- Câmera Bayer. O cubo deriva de grayscale/frações RGB — não de monocromador.
- Índices instáveis em sombra. RI, IOI, Porph_Index explodem quando .
- UV 400 vs 365 nm. Excitação húmica subótima em relação ao pico ~360 nm.
- Fluorescência misturada. Sem filtro de emissão dedicado; sinal UV mistura reflectância e fluorescência.
- Caveat Ce³⁺/REE. Interpretação biológica de UV exige contexto mineralógico (Q4).
- Amostragem. Sessões documentadas são por tipo; sem Walkley–Black, cultura microbiana ou TVB-N pareados.
10. Direções de pesquisa
- Flat-field com painel ; caracterizar perfil angular do LED (lição PIXL 0,4%).
- Completar 8 bandas JCDE; integrar IR 850 nm alinhado ao Atomos; filtro IR-cut retrátil.
- Validação em solos do Piauí (): SOC, textura pipeta, Fe DCB; PLSR/RF com RPD .
- Resampling BSSL Vis-NIR para bandas discretas do sensor.
- Separação óptica de fluorescência (filtros de emissão) e teste Ce³⁺ em solos fosfatados.
- Export CSV multibanda compatível com Atomos ↔ segmentação de carcaça; fusão espectral–morfológica para IN 9/2004.
- Laço multiangular (visual servoing SCARA) sobre as mesmas bandas.
11. Conclusão
No âmbito do sensoriamento remoto proximal e da espectroscopia de imagem, o MSI-sensor formaliza a tese de que poucas bandas LED, fisicamente motivadas e adquiridas sequencialmente, bastam para extrair assinaturas de óxidos de ferro, matéria orgânica, autofluorescência microbiana e contraste mioglobina/gordura — com custo orders of magnitude inferior à espectroscopia contínua. Os ensaios de solo (índices + PCA), microbiota (44 colônias) e carne (UV–vermelho) respondem exploratoriamente a Q1–Q3; a revisão PIXL condiciona Q4: fluorescência UV exige cautela mineralógica. O instrumento não substitui o espectrorradiômetro nem o Atomos de produção — fornece o núcleo metodológico open-source sobre o qual o roadmap de 8 bandas, PLSR e fusão com tipificação de carcaças pode ser testado. A validade quantitativa depende, daqui em diante, de radiometria absoluta, pareamento químico multi-amostra e alinhamento banda-a-banda com o hardware Atomos.
Referências
- Kubelka, P., & Munk, F. (1931). Ein Beitrag zur Optik der Farbanstriche. Zeitschrift für technische Physik, 12, 593–601.
- Smith, G. M., & Milton, E. J. (1999). The use of the empirical line method to calibrate remotely sensed data to reflectance. International Journal of Remote Sensing, 20(13), 2653–2662.
- Escadafal, R. (1989). Remote sensing of arid soil surface color with Landsat thematic mapper. Advances in Space Research, 9(1), 159–163.
- Mathieu, R., Pouget, M., Cervelle, B., & Escadafal, R. (1998). Relationships between satellite-based radiometric indices simulated using laboratory reflectance data and typical soil color of an arid environment. Remote Sensing of Environment, 66(1), 17–28.
- Barrón, V., & Torrent, J. (1986). Use of the Kubelka–Munk theory to study the influence of iron oxides on soil colour. Journal of Soil Science, 37(4), 499–510.
- Viscarra Rossel, R. A., Walvoort, D. J. J., McBratney, A. B., Janik, L. J., & Skjemstad, J. O. (2006). Visible, near infrared, mid infrared or combined diffuse reflectance spectroscopy for simultaneous assessment of various soil properties. Geoderma, 131(1–2), 59–75.
- Chance, B., et al. (1979). Oxidation-reduction ratio studies of mitochondria in freeze-trapped samples. Journal of Biological Chemistry.
- Allwood, A. C., et al. PIXL instrument documentation / Mars 2020 — UV reflectance LEDs and calibration (revisão em
pixl_uv_review.tex). - Melo, L. S., et al. (2026). Low-Cost LED-Based Multispectral Sensor for Soil Property Estimation Using UV-Vis-NIR Discrete Bands. Manuscrito JCDE / MSI-sensor.
- MSI-sensor. Repositório open-source (MIT). https://github.com/rexionmars/MSI-sensor








