WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bild binär einlesen und die LSB's abschneiden ?

 

DER-TYP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2009, 20:18     Titel: Bild binär einlesen und die LSB's abschneiden ?
  Antworten mit Zitat      
Hallo

ich bin Gerade dabei eine Bildanalyse durchzuführen, bei der ich die LSB's eines Bildes benötige (besser noch jeder einzelnen Bildebene[RGB]). Da Matlab die Bilder jedoch als UINT8 Array einließt, müssen diese erst zeitaufwendig in Binärwerte umgewandelt werden.
Deshalb folgende Fragen:

1.) Wie kann man von einem Bild die LSB's „abschneiden“ oder das Bild gleich binär einlesen, so das die zeitaufwendige Transformation nicht mehr zu machen ist ?

Bisheriger Ansatz (dauert ewig):
Code:


function [lsb]=cutlsb(matrixdata)
%der zweite Versuch die LSBs aus einem Bild zu lesen, diesmal über die
%Vektorisierung der einzelnen Helligkeitswerte

[row,col] = size(matrixdata);
lsb =[];
for i=1:row
    for j=1:col
        %dec2binvec wandelt eine dezimal Zahl in ein Array aus Binärzahlen
        %um , dabei ist die erste Zahl das LSB
        wert = double(matrixdata(i,j));
        bin = dec2binvec(wert,8)  %Hier wird der Binärcode erstellt
       
        % wegen Formatkonflikten LOGICAL und CHAR wurde diese IF Anweisung
        % eingefügt
        if bin(1,1) == true
            temp = '1'
        else
            temp = '0'
        end    
       
        %hier werden alle LSB's als String verkettet
        lsb=strcat(lsb,temp);
    end
end
end

 


Schön wäre es wenn man das Bild als 24Bit Zeichenkette einlesen könnten und dann nur noch jedes 8te, 16te, 24te Bit nimmt und diese verkettet.


2.) Wie kann man bei einer Umwandlung von ACSII Zeichen dafür sorgen, dass Matlab immer die Zeichen als 8Bit Zeichenkette aus gibt und nicht als 7Bit Zeichenkette( was es auf Grund der kleinen Zahlen leider tut) wie bei meinem Versuch?

Code:


zahlenarray = uint8(String);
binaerarray =  dec2bin(zahlenarray);

 


P.S.
Wer sich mit der GUI Programmierung auskennt, könnte bitte auch noch einen Blick auf meinen anderen Eintrag werfen. (Ich hoffe das fällt jetzt nicht unter Crossposting)

http://www.gomatlab.de/viewtopic,p,16183.html#16183


Ich hoffe mien Anliegen ist verständlich und freue mich auf Antworten.
In diesem Sinne, Dank im vorraus

MfG
DER-TYP


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2009, 21:38     Titel:
  Antworten mit Zitat      
Hallo,

ich kenne mich da eigentlich nicht aus - allerdings denke ich dass die Umwandlung dadurch so lange dauert, weil alles in einer Schleife passiert!
z.B.
Code:
matrixdata = round(255*rand(1000,1000)); % 1000 x 1000 matrix
matrix_bin = dec2bin(matrixdata,8);
LSB = matrix_bin(:,1)';


Die Funktion "dec2binvec" gibt es bei mir nicht.

Zu deiner zweiten Frage: man kann "dec2bin" die Anzahl der Bits mitgeben.
Code:
binaerarray = dec2bin(String,8);


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
DER-TYP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2009, 19:10     Titel:
  Antworten mit Zitat      
Vielen Dank dib0r;

an so eine einfache Variante hab ich schon garnicht mehr gedacht. Die Zeitersparniss liegt so ca bei 10000fach.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.