Calcoli l’istogramma di ogni canale di un’immagine
Conti come si distribuiscono i valori di un canale in intervalli uguali. Con i 16 intervalli predefiniti, i valori da 0 a 15 finiscono nel primo, da 16 a 31 nel secondo e da 240 a 255 nell'ultimo, e ogni pixel viene contato una volta sola. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Il calcolatore di istogrammi trasforma i valori dei pixel separati per canale in distribuzioni di frequenza compatte. Indichi uno o più canali con nome, scelga il numero di intervalli e riceva un elenco ordinato di conteggi per ciascun canale. È utile quando l’immagine è già stata decodificata e Lei desidera statistiche riproducibili senza caricare o ricodificare il file originale. Ogni valore viene verificato nell’intervallo a 8 bit, ogni pixel appartiene a un solo intervallo e una lista vuota produce un errore.
Prepari i valori dei canali
Fornisca i pixel decodificati nell’array channels. Ogni elemento deve includere un nome di canale univoco e un array values con intensità intere da 0 a 255. I nomi red, green, blue, alpha e gray sono comuni, ma il calcolatore non impone un modello cromatico: è ammesso qualsiasi componente che utilizzi lo stesso dominio a 8 bit.
L’ordine dei valori non modifica l’istogramma, perché conta soltanto la frequenza. Ogni canale deve contenere almeno un pixel. La richiesta viene rifiutata se l’elenco esterno o un array values è vuoto, se un nome manca o è duplicato, oppure se un valore è frazionario o fuori dall’intervallo.
Questi controlli evitano che dati incompleti sembrino una distribuzione valida. Sono ammessi fino a sedici canali e un milione di valori per canale.
Comprenda l’assegnazione agli intervalli
Scelga un numero intero di intervalli da 1 a 256, oppure ometta il campo per usarne 16. L’intero dominio delle intensità a 8 bit viene suddiviso in fasce di uguale ampiezza, da 0 a 255. Con 16 intervalli, il primo conta i valori da 0 a 15, il secondo da 16 a 31 e l’ultimo da 240 a 255.
In generale, l’indice è la parte intera inferiore del valore moltiplicato per il numero di intervalli e diviso per 256. Il limite superiore viene conservato esplicitamente nell’ultima fascia, quindi 255 non rimane mai escluso. La definizione è deterministica anche quando il numero scelto non divide 256 in modo uniforme.
Legga, confronti e verifichi il risultato
La prima posizione rappresenta sempre la fascia più scura e l’ultima quella più chiara, facilitando grafici e confronti. Gli istogrammi descrivono frequenze, non la disposizione spaziale, quindi immagini molto diverse possono produrre lo stesso risultato. La capacità non decodifica file, non identifica spazi colore, non normalizza l’esposizione e non unisce canali.
Decodifichi prima la sorgente e usi questo strumento per il conteggio.
Casi d'uso
Confrontare le distribuzioni cromatiche
Generi conteggi omogenei per rosso, verde e blu prima di misurare le differenze tra immagini decodificate.
Individuare estremi di esposizione
Esamini le prime e le ultime fasce per riconoscere canali dominati da ombre o alte luci.
Verificare una pipeline di elaborazione
Registri istogrammi deterministici prima e dopo una trasformazione per rilevare variazioni tonali impreviste.
Domande frequenti
Qual è il costo?
Lo stesso calcolo deterministico è disponibile anche nel browser.
Quali valori dei pixel sono accettati?
Ogni valore deve essere un intero da 0 a 255, come previsto per un canale d’immagine a 8 bit.
Che cosa accade se una lista di pixel è vuota?
La richiesta termina con un errore di input non valido; una lista vuota non genera un istogramma pieno di zeri.
Come vengono assegnati i valori se gli intervalli non dividono 256?
L’indice usa la parte intera inferiore di value moltiplicato per bins e diviso per 256, mantenendo 255 nell’ultima fascia.
La capacità decodifica file PNG, JPEG o WebP?
No. Lei deve fornire valori già decodificati e organizzati in array di canali con nome.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/image/histogram \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}'const res = await fetch("https://api.kit.forhosting.com/image/histogram", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/histogram",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/histogram", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/histogram", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.histogram",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_channels | 16 |
max_values_per_channel | 1000000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Comprenda l’assegnazione agli intervalli
Ogni pixel incrementa un solo contatore e la somma dei conteggi coincide con pixel_count.
Legga, confronti e verifichi il risultato
La risposta riporta bins, i limiti fissi value_min e value_max e un oggetto istogramma per ogni canale in ingresso. Ciascun oggetto conserva il nome, indica pixel_count e restituisce counts in ordine crescente di intensità. Sommi counts e verifichi che il totale corrisponda a pixel_count: l’algoritmo garantisce tale proprietà e il controllo può rivelare troncamenti avvenuti altrove. Nel browser i dati restano locali; l’automazione API costa $0.002 per richiesta.
Domande tecniche
I canali possono avere quantità di pixel differenti?
Sì. Ogni canale viene contato separatamente e restituisce il proprio pixel_count.