Spaltenzahl eines bestimmten Wertes in einer Matrize
kojoteKarl
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.05.2015, 16:50
Titel: Spaltenzahl eines bestimmten Wertes in einer Matrize
Hallo,
bis jetzt konnte ich mich über die Forensuch gut retten, aber jetzt steh ich vor einem Problem, bei dem ich nicht weiter komme.
Hintergrund ist ein Programm für einen automatisierten Zugversuch. Auf einem Probekörper befinden sich zwei Farbpunkte, über die die Dehnung berechnet werden, soll (hab ich mir zumindest so ausgedacht). Ich lese also als erstes das Video ein und zerlege es dann, in einer Schleife, in einzelne Bilder.
xyloObj = mmreader('MVI_7034 - Kopie.MOV'); %Video wird eingelesen
nFrames = xyloObj.NumberOfFrames; %Anzahl der Bilder im Video
vidHeight = xyloObj.Height; %Höhe des Videos in Pixel
vidWidth = xyloObj.Width; %Breite des Videos in Pixel
for k = 1 : nFrames
B{k} = read( xyloObj, [k] ); %videoframe einlesen
Wenn sich jetzt ein grüner Farbpunkt mit den Wert 250-255 auf dem Körper befindet, würde ich gern wissen, in welchen Spalten sich diese Werte befinden.
Ein Farbbild ist ja im Prinzip eine dreidimensionale Matrix, sprich mxn und das ganze drei mal für die Werte RGB.
Also die Frage: Wie kann ich auf die G-Matrix zugreifen und mir die Zeilen mit den bestimmten Wert ausgeben lassen?
Für das Durchsuchen habe ich jetzt erst mal folgende Lösung.
Code:
clearall
A = [125525325556; 782123; 123256; 789123];
b = size(A);
c = b(1,2)
d = b(1,1)
f = 0
s = 0 for n = 1 : c;
for m = 1 : d;
Wert=A(m,n);
if Wert >= 250;
f = f + 1 end end end
f
M = zeros(1,f) for n = 1 : c;
for m = 1 : d;
Wert=A(m,n);
if Wert >= 250;
s = s + 1
M(1,s)= n
end end end
xyloObj = VideoReader('MVI_7034 - Kopie.MOV'); %Video wird eingelesen
nFrames = xyloObj.NumberOfFrames; %Anzahl der Bilder im Video (Frames)
nFrames
vidHeight = xyloObj.Height; %Höhe des Videos in Pixel
vidHeight
vidWidth = xyloObj.Width; %Breite des Videos in Pixel
vidWidth
T = xyloObj.Duration;
T
for k = 1 : 2 %nFrames
B{k} = read( xyloObj, [k]); %videoframe einlesen
[row col]=find(B{k}(:,:,2)>=250);
end
mmmmmhhhhhh danke, das sieht schon so aus, wie ich mir das vorgestellt habe. Bis jetzt habe ich den Code geschrieben, aber irgendwas stimmt nicht. Ich möchte die Länge eines blauen Streifens in einem Bild ermitteln mit folgenden Code. Die Anzahl der Pixel sind aber viel zu groß (soll=ca 230 ist=338). Wenn man sich die einzelnen Matrizen für r, g, b anschaut, fällt, auf das bei z.b. Blau in jeder Spalte ein wert zwischen 120-130 vorkommen soll. Oder beschreiben die zahlen etwas anderes? Video liegt hier https://www.dropbox.com/s/fwv6x60ch8shznq/CAM00241.mp4?dl=0
Code:
xyloObj = VideoReader('CAM00241.mp4'); %Video wird eingelesen
nFrames = xyloObj.NumberOfFrames; %Anzahl der Bilder im Video (Frames)
nFrames
vidHeight = xyloObj.Height; %Höhe des Videos in Pixel
vidHeight
vidWidth = xyloObj.Width; %Breite des Videos in Pixel
vidWidth
T = xyloObj.Duration;
T
B = read( xyloObj, [1]); %videoframe einlesen
RV=find(any(B(:,:,3) >= 40 & B(:,:,3) <= 50 ,1))
GV=find(any(B(:,:,2) >= 65 & B(:,:,2) <= 75 ,1))
BV=find(any(B(:,:,2) >= 120 & B(:,:,2) <= 130 ,1))
BV
StreifenM = 0 for n = 1 : length(RV) for nn = 1 : length(GV) if RV(n) == GV(nn) for nnn = 1 : length(BV) if RV(n)== BV(nnn)
StreifenM = StreifenM + 1
Alles cool es ist genau das was ich gesucht habe.
Danke ich hatte nur die Intervalle falsch gesetzt.
Eine letzte Frage noch. Die Zahlen der Matrixebene also 1, 2, 3 ist da die Zuordnung 1=r, 2=g und 3=b?
Vielen Dank
MfG
kojo
Einstellungen und Berechtigungen
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
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.