PDA

View Full Version : [VB.NET] Intercettare un colore in una immagine


OrcaAssassina
03-10-2008, 11:56
Devo realizzare questo:

Ho delle immagine fatte con una "telecamera termica"

In questa immagine ho uno sfondo tutto BLU per il freddo

Ed un oggetto ROSSO-GIALLO per il caldo ben distinto e definito

Mi serve tramite un'applicazione inviare le foto e lui automaticamente mi individua la posizione della parte ROSSO-GIALLO.

E' possibile fare una cosa del genere????

Cioè lavorare con i colori?????

Ci sono dei compontenti o non servono?????

Ciao e grazieeeeeeeeeeee

gugoXX
03-10-2008, 12:37
Devo realizzare questo:

Ho delle immagine fatte con una "telecamera termica"

In questa immagine ho uno sfondo tutto BLU per il freddo

Ed un oggetto ROSSO-GIALLO per il caldo ben distinto e definito

Mi serve tramite un'applicazione inviare le foto e lui automaticamente mi individua la posizione della parte ROSSO-GIALLO.

E' possibile fare una cosa del genere????

Cioè lavorare con i colori?????

Ci sono dei compontenti o non servono?????

Ciao e grazieeeeeeeeeeee

Non hai spiegato cosa deve essere l'output.
Ipotizza che si possa rilevare una zona rosso-gialla... e poi?
compontenti sono componenti o sono competenti?

OrcaAssassina
03-10-2008, 14:02
Non hai spiegato cosa deve essere l'output.
Ipotizza che si possa rilevare una zona rosso-gialla... e poi?
compontenti sono componenti o sono competenti?

Praticamente mi serve rilevare lo spostamente dall'asse verticale posto proprio al centro della foto.

Quindi vedere di quanto si è spostato.

In pratica la foto riguarda sempre la stessa immagine e parliamo di 2 metri per 2.

Parlavo di componenti!!!!!! ahahahahh

gugoXX
03-10-2008, 14:41
Praticamente mi serve rilevare lo spostamente dall'asse verticale posto proprio al centro della foto.

Quindi vedere di quanto si è spostato.

In pratica la foto riguarda sempre la stessa immagine e parliamo di 2 metri per 2.

Parlavo di componenti!!!!!! ahahahahh

Riflettendo che il giallo in realta' e' un rosso con anche componenti blu e verde, allora potresti limitare l'analisi al solo rosso puro.
Io proverei a fare cosi'.
Rileverei dall'immagine la sola componente rossa, per ciascun pixel.
Effettuerei la ricerca del centro di massa, come se i pixel fossero corpi di peso pari alla componente rossa.
Ne risultera' una coordinata che non necessariamente sara' coincidente con un corpo rosso (se ce n'e' uno solo allora si', ma potrebbe non essere necessariamente cosi')
In ogni caso successive variazioni di posizione di un corpo rosso si rifletterebbero sulla variazione della nuova coordinata, e quindi si potrebbe avere un'indicazione dello spostamento relativo rispetto alla penultima calcolata.

Ovviamente si puo' ulteriormente ridurre all'analisi della sola componente Y della coordinata.
Il tutto dovrebbe anche essere decisamente veloce.

OrcaAssassina
04-10-2008, 08:34
Riflettendo che il giallo in realta' e' un rosso con anche componenti blu e verde, allora potresti limitare l'analisi al solo rosso puro.
Io proverei a fare cosi'.
Rileverei dall'immagine la sola componente rossa, per ciascun pixel.
Effettuerei la ricerca del centro di massa, come se i pixel fossero corpi di peso pari alla componente rossa.
Ne risultera' una coordinata che non necessariamente sara' coincidente con un corpo rosso (se ce n'e' uno solo allora si', ma potrebbe non essere necessariamente cosi')
In ogni caso successive variazioni di posizione di un corpo rosso si rifletterebbero sulla variazione della nuova coordinata, e quindi si potrebbe avere un'indicazione dello spostamento relativo rispetto alla penultima calcolata.

Ovviamente si puo' ulteriormente ridurre all'analisi della sola componente Y della coordinata.
Il tutto dovrebbe anche essere decisamente veloce.

Ok esatto...proprio così!!!!!!!!

Adesso però c'è da svilupparlo.....ci sono componenti per lavorare con i colori?????

Hai qualche esempio da propormi....ho fatto delle ricerche ma non riesco a trovar nulla con i colori.

gugoXX
04-10-2008, 09:49
Ok esatto...proprio così!!!!!!!!

Adesso però c'è da svilupparlo.....ci sono componenti per lavorare con i colori?????

Hai qualche esempio da propormi....ho fatto delle ricerche ma non riesco a trovar nulla con i colori.

Se hai un'immagine che e' gia' molto probabilmente in una qualsiasi codifica true-color (che sia 24 bit, 32 bit, 16 bit (5-6-5) non importa)
Allora ogni pixel ti dice gia' quale e' il colore che lo rappresenta in modo diretto, enunciando le componenti RGB

Quindi puoi usare la GetPixel (o qualunque cosa ci sia in VB)
e il risultato saranno gia' le 3 componenti, impacchettate a seconda del formato dell'immagine.

CarloDON
06-07-2009, 09:13
Desidererei sapere se vi è la possibilità di selezionare una parte di una immagine .jpg o .bmp per poi adoperare i comandi get pixel and set pixel

MarcoGG
06-07-2009, 15:30
Ho delle immagine fatte con una "telecamera termica"

In questa immagine ho uno sfondo tutto BLU per il freddo

Ed un oggetto ROSSO-GIALLO per il caldo ben distinto e definito

Mi serve tramite un'applicazione inviare le foto e lui automaticamente mi individua la posizione della parte ROSSO-GIALLO.


Considerando che il rosso dovrebbe essere meno caldo del giallo, e ipotizzando che ci sia sempre una regione gialla nelle immagini, la risolverei più o meno così, ma la si può complicare a piacere :

Dim regioneGiallo As New List(Of Point)
Dim colorePx As Color
For x As Integer = 0 To BMP.Width - 1
For y As Integer = 0 To BMP.Height - 1
colorePx = BMP.GetPixel(x, y)
If colorePx = Color.FromArgb(255, 255, 0) Then regioneGiallo.Add(New Point(x, y))
Next
Next

Dim centroRegioneX As Integer = 0
Dim centroRegioneY As Integer = 0
Dim xTot As Integer = 0
Dim yTot As Integer = 0
For Each P As Point In regioneGiallo
xTot += P.X
yTot += P.Y
Next
centroRegioneX = xTot / regioneGiallo.Count
centroRegioneY = yTot / regioneGiallo.Count

MsgBox(centroRegioneX & ", " & centroRegioneY)
BMP.SetPixel(centroRegioneX, centroRegioneY, Color.Black)
PictureBox1.Image = BMP

BMP è l'immagine ( nel mio caso una Bitmap ).
Le ultime 3 linee sono solo a scopo di verifica "ad occhio".
Se interessa anche la regione rossa, suggerirei di dare un "peso" diverso alle coordinate dei singoli punti, a seconda che siano più o meno caldi... Grosso modo è il concetto del calcolo del C.M. di un sistema di N punti materiali, come già indicato da gugoXX... ;)

banryu79
07-07-2009, 13:43
@MarcoGG: la tua risposta è ottima, senonchè dovresti chiedere in prestito a Doc la sua Delorean per tornare indietro di 8 mesi... :D

MarcoGG
07-07-2009, 14:31
@MarcoGG: la tua risposta è ottima, senonchè dovresti chiedere in prestito a Doc la sua Delorean per tornare indietro di 8 mesi... :D

Grande Giove ! :D
Lo so, hai ragione, me ne sono accorto dopo. Avevo visto solo la data dell'ultimo post di CarloDON, mentre non ho fatto caso alle precedenti... :stordita:

Kralizek
07-07-2009, 17:16
mica é colpa sua se ci sono sti esempi di forum digging :P