Springen naar inhoud

Bmp inlezen in matlab.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 09 maart 2008 - 18:11

Graag had ik in matlab een bmp bestand ingelezen en de data erin verwerkt. Het inlezen doe ik met imread dit geeft me een array voor elke kleur een een matrix met daarin de waarde van de kleur op de juiste plaats.

Graag had ik nu mijn data als volgt verwerkt
D(1:kol,1:rij)=A(1:rij, 1:kol,1)+A(1:rij, 1:kol,2)*1000+A(1:rij, 1:kol,3)*1000000
Met D een nieuwe matrix.
Probleem is nu dat matlab niet toelaat dat waardes in D groter worden dan 255 Hoe los ik dat op ?
Groeten.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 09 maart 2008 - 19:11

Bij mij werkt het gewoon. Hoe ziet je code eruit en welke error krijg je?
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#3

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 maart 2008 - 15:29

Het werkt wel maar niet volledig.
Als je namelijk een kleur in je bmp bestand hebt met waarde 255 255 255 dan vraag ik dat in de matrix D volgende komt te staan 255+255*1000+255*1000000
omdat dit groter is dan 255 schrijft hij in matrix D gewoon 255
Neem ik kleuren die niet aanleiding geven tot deze limiet en bijkomend de vermenigvuldiging weg laat dan werkt het.

hoe komt dat?

Groeten.

#4

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 10 maart 2008 - 19:47

Ah, ik zie het probleem. De functie 'imread' geeft een matrix van uint8 type mee. Je moet de matrix dus eerst converteren:

A = imread('myImage.bmp');

A = uint32(A);

D = A(:,:,1) + A(:,:,2) * 1e3 + A(:,:,3)*1e6;
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#5

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 maart 2008 - 19:55

Okť bedankt.
Converteert die dat dan niet automatisch? Groeten.

#6

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 10 maart 2008 - 20:04

Nee, matlab converteert niet automatisch.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#7

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 maart 2008 - 21:18

Okť bedankt voor de hulp.

#8

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 11 maart 2008 - 18:30

Als ik nu van de matrix D een histogram (of C ) probeer te maken dan geeft die volgende fout:
Geplaatste afbeelding

Hoe komt dat? Groeten.

#9

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 11 maart 2008 - 21:47

Gebruik in plaats van

A = uint32(A)

dit:

A = double(A)

Ik weet niet of het wel zo'n goed idee is om de functie hist los te laten op zo'n grote matrix. Je kunt namelijk maar weinig informatie uit de grafiek halen.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#10

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 12 maart 2008 - 18:57

Bedankt het werkt, het was gewoon voor een exp. Groeten.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures