Calcoli l’istogramma di ogni canale di un’immagine
Il calcolatore di istogrammi trasforma i valori dei pixel separati per canale in distribuzioni di frequenza compatte.
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
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. 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à. La prima posizione rappresenta sempre la fascia più scura e l’ultima quella più chiara, facilitando grafici e confronti. Sommi counts e verifichi che il totale corrisponda a pixel_count: l’algoritmo garantisce tale proprietà e il controllo può rivelare troncamenti avvenuti altrove. 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. Nel browser i dati restano locali; l’automazione API costa $0.002 per richiesta.
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?
L’esecuzione tramite API costa $0.002 per richiesta. 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.
I canali possono avere quantità di pixel differenti?
Sì. Ogni canale viene contato separatamente e restituisce il proprio pixel_count.
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. |