Newsgroup: it.comp.macintosh
Titolo: ImageMagick... capire se una immagine è quasi un  Bianco/Nero/Grigi.

 
Qualcuno sa se è possibile con ImageMagick (o altra via ma dubito) un 
comando che rilevi se un file RGB (non in scala di grigi...) è in realtà 
assimilabile a un bianco/nero/grigi?
 
Voglio dire, ho 5 file immagine (a colori) delle quali 3 sono con vari 
colori, mentre 2 sono "in pratica" un bianco/nero/grigi, ovvero non 
hanno colori (o al massimo un paio di colori, anche sfumati).
 
Aprendole lo si vede subito... quali sono le 3 a colori e le 2 no.
Ovviamente :D ... :-/
È senza aprirle che vorrei capire se ci fosse un modo per distinguere le 
une dalle altre.
 
Sento che non avrò risposte.
 
-- 
// Treat everyone u meet like u want to be treated
        aggiungere un tra per spedire posta

 Sento che non avrò risposte.
 
se tiri a indovinare hai quasi il 50%* di possibilità di azzeccare, non ti
basta :-) ?
 
-- 
so long, and thanks for all the fish

 Sento che non avrò risposte.
 
prova a comparare l'immagine con la sua versione in scala di grigi
(ritrasformata in rgb). Se l'immagine di partenza e' quasi in b/n non
dovrebbero esserci troppe differenze.
Oppure potresti trasformare l'immagine nello spazio di colore YCbCr e
vedere quandta informazioni c'e' nei due canali Cr e Cb. Nelle immagini
in bianco e nero c'e' informazione solo nel canale Y (luminanza), mentre
le due crominanze (blu e rossa) sono a zero.
 
Ciao Jack
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 le due crominanze (blu e rossa) sono a zero.
 
Hmmm sě, in rete avevo trovato qualcosa di simile (piů o meno). 
Purtroppo la cosa diventa un po' lunghetta con anche solo 200 
immagini... pur automatizzando il tutto :-/
Speravo ci fosse qualche sistema piů "immediato" e senza passare da 
trasforma-confronta.
 
Possibile che nel 2014 non ci sia qualche ammennicolo che faccia al caso?
Pare di sě...


mi pare che esista un qualche modo (vedi la documentazione di identify)  per farsi dire il numero di colori usati in una immagine... se sono più di 256 (per immagini ad 8 bit) allora è certamente a colori... se sono di meno allora POTREBBE essere in scala di grigio.
Altra soluzione è vedere se è possibile ottenere l'istogramma dei colori diviso per i canali RGB. Se i 3 canali hanno uguale istogramma allora è in scala di grigio

,

Ti ringrazio della risposta, ma non mi interessa sapere se è in "scala 
di grigio" e non RGB. Per sapere se RGB o che altro c'è un modo 
semplicissimo.
Io vorrei sapere se una immagine jpg o altro formato, RGB (dunque 
ufficialmente "a colori"...) contiene **in realtà** prevalentemente 
grigi/bianco nero. E va bene anche se ha qualche colore (sfumato o no).
Ma nel complesso è una immagine che riproduce un disegno composto da 
grigi/BN.
 
Una volta scoperto che su 100 file RGB (a colori, ripeto) 10 o 57 
raffigurano prevalentemente una immagine in grigi/BN, so che questi 10 o 
57 posso convertirli tranquillamente in PNG per ridurne il peso. Magari 
processandoli poi con PNGquant o simili.
 
Questo è il mio problema. Che potrebbe anche tornar utile ad altri. 
Immagino.


 processandoli poi con PNGquant o simili.
Potresti convertirli tutti in altra cartella, e poi confrontarne la
dimensione con uno script bash... ma IMHO, stai meno a passarli a mano
(mela + barra) ed etichettare quelli da converitre. Tra l'altro puoi
etichettare anche sui risultati di una ricerca.
 
-- 
Per contattarmi, togliere -NOSPAM- dall'indirizzo.
To contact me, remove -NOSPAM- from address.

 etichettare anche sui risultati di una ricerca.
 
Era quello che non volevo sentirmi dire ... :D ... (perché lo sospettavo 
già per conto mio ... :-/ ...)



e funziona anche con l'anteprima aperta ;)


 une dalle altre.
 
provare a processare l'uscita testuale?
 
convert <nomeimmagine> -unique-colors -depth 8 txt:- > uscita.txt
 
 
-- 
quintadicopertina - editoria digitale - 
http://www.quintadicopertina.com
 

 convert <nomeimmagine> -unique-colors -depth 8 txt:- > uscita.txt
 
Ok. Ma dopodiché? Come faccio a capire dall'uscita testuale/istogrammi 
ecc. che quell'immagine "a colori" contiene in realtà un prevalente 
bianco/nero/grigi e pochi o nessun colore a tutti gli effetti?..
 
Se passo un'immagine RGB "full color" mi tornano 104'652 linee/colori.
(con piping  wc -l )
Se passo un'immagine RGB "pseudo gray" mi tornano  11007 linee/colori. 
 
Dici che dall'abbondanza di un risultato o un altro si capisce e si può 
presumere che valori "bassi" siano restituiti dalle immagini che 
interessano?..


 e funziona anche con l'anteprima aperta ;)
 
Terrò presente ... !
Il fatto è che usando anche FastScripts ... non so più che combinazioni 
tastiera inventarmi :-(


 tastiera inventarmi :-(
Qualche combinazione che usi in qualche software particolare e non nel
Finder ;-)
mela+alt+numero l'ho messo per l'appunto perché lo uso in un software
spacifico.


 convert <nomeimmagine> -unique-colors -depth 8 txt:- > uscita.txt
 
Avevo chiesto lumi anche sul sito apposito.
Ho ricevuto questa risposta:
 
 ======
The average (mean) saturation would do it:
 
convert in.jpg -colorspace HSL -channel G -separate -format %[fx:mean] 
info:
 
This returns zero if the image if black/gray/white, 1.0 if it is fully 
saturated, slightly above zero if it is nearly gray, etc.
 
 ======
 
Vedo di fare un po' di prove e poi dirò.


 ...questo sembra più centrato. Ha funzionato?
 
In realtà no. Molto meglio la tua brillante soluzione... anche se più 
lenta (in effetti per immagini con centinaia di migliaia di colori deve 
contarsi tutte le righe di output...). E su un paio di immagini ok.
Già su un centinaio "soltanto" però, i tempi si allungano non poco. Ma 
chi se ne frega, non mi corre dietro nessuno. Salvo gli impiegati della 
banca...
 
E il ciclo di controllo l'ho eseguito con un repeat in AppleScript 
immagine per immagine. Probabilmente si può fare in modo più efficiente 
restando "in terminale" ma io non saprei come.
Quando una immagine torna meno di 15'000 colori al 99% può essere 
convertita senza ripensamenti in PNG. Forse ci sta anche fino a 20'000.
 
Al contrario l'altro comando suggerito non è molto attendibile ai miei 
fini. Include immagini che sarebbe preferibile non convertire e con un 
range di valori sulle immagini provate da 0,45 a 6,5 circa ... mai 
oltre, cosa poco utile.
 
Insomma già ora così non è male. Vediamo se si trova qualche 
miglioramento.
Strano tuttavia che con tutta la fantascienza realizzata odierna una 
cosa così "stupida" sia tanto poco immediata.


 range di valori sulle immagini provate da 0,45 a 6,5 circa ... 
 
0,45 < > 0,65


 ...questo sembra più centrato. Ha funzionato?
 
Ho scatenato l'inferno... :D ... 
 
Questo è l'ultimo ritrovato:
 
Dopo cd nel folder con le immagini (senza spazi nel nome...) e con un 
opzionale | sort -k 2 al termine se si vogliono i risultati in ordine.
 
 
list=`ls`
for img in $list; do
convert $img \
\( -clone 0 -colorspace gray \) \
-compose difference -composite \
-separate -evaluate-sequence mean \
-threshold 4% -format "%f %[fx:mean]\n" info:
done
 
Risultando:
 
f0114-01.jpg 0.341038
f0114-02.jpg 0.0907454
f0115-01.jpg 0
f0115-02.jpg 0.0368602
f0116-01.jpg 0.676579
f0116-02.jpg 0.00588972
f0117-01.jpg 0.830874
f0117-02.jpg 0.236475
f0118-01.jpg 1.50094e-05
f0118-02.jpg 0.669526
f0119-01.jpg 0.343041
... ecc.
 
 
In base a quel 4% o diverso valore, torna valori da "0" a Nmila. E più è 
vicino a 0 più l'immagine è "ben convertibile" in PNG.
Ovvero contiene pochi colori o colori vicini a scala di grigi.
 
Ok è più "scientifico" ma... detto tra noi, anche senza troppe seghe il 
tuo metodo "naif" continua a essere abbastanza attendibile.
Eddai che son soddisfazioni .-)
