Benachbarte Daten aus Matrix mit double Werte zählen
Palitsch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.09.2015, 17:30
Titel: Benachbarte Daten aus Matrix mit double Werte zählen
Hallo goMatlab,
ist es prinzipiell möglich benachbarte Werte (sagen wir mal, größer als ein Wert X) einer Matrix zu zählen?
Es gibt viele Ansätze die dann die Matrix in ein black&white Image umwandeln und dann mit bwconncomp hantieren, aber das will ich nicht.
Ich will das meine Matrix die double-Werte behält (denn es sind auch negative dabei die berücksichtigt werden)
Hat da jemand eine Idee??
ich verstehe das problem noch nicht. bitte ein minimalbeispiel zur verfügung stellen das dein problem verdeutlicht. was hast du versucht? wie weichen die erzihlten ergebnisse von den gewünschten ab?
grüße
_________________
Hi Winkow,
also, ich schick mal den gesamten Code und geh dann spezifisch auf die Stelle ein.
Code:
% alle Bilder (tif-Format) im Ordner bestimmen [stat,tifpics]=fileattrib('*.tif');
% Anzahl Bilder
picnr = length(tifpics);
for k=1:picnr
% Bild einlesen
bild{k} = imread(tifpics(k).Name);
% Bild in Graustufenwerte umwandeln
bild_grau{k}= rgb2gray(bild{k});
end
% -> WICHTIG: hier wird uint8 in double umgewandelt was später Probleme macht. Subtraktion von aufeinanderfolgenden Graustufenbildern
cell_array_bild=cell(1,picnr);
imdouble=cell(1,picnr);
for j=1:picnr
cell_array_bild(1,j)=bild_grau(j);
imdouble{j}=im2double(cell_array_bild{j});
end
cell_array_pdiff=cell(1,picnr-1);
% Trigger setzen (hier: gezählt werden alle Pixel mit Wert >0.05&<-0.05)
for i=1:picnr-1
cell_array_pdiff{1,i}=imdouble{i}-imdouble{i+1};
cell_array_pdiff_entstanden{1,i}=cell_array_pdiff{1,i}>0.05;
cell_array_pdiff_zerfallen{1,i}=cell_array_pdiff{1,i}<-0.05;
end
% WICHTIG:Benachbarte Pixel werden gezählt und Pixelfläche wird berechnet (sollte so sein, aber ich denke bwconncomp funktioniert ja nur mit uint8 und deswegen sind alle Rechnungen danach Müll)
for h=1:picnr-1
CC1=bwconncomp(cell_array_pdiff_entstanden{1,i});
STATS1{h}=regionprops(CC1,'Area');
end
for h=1:picnr-1
CC2=bwconncomp(cell_array_pdiff_zerfallen{1,i});
STATS2{h}=regionprops(CC2,'Area');
end
% Ergebnis in EXCEL einlesen for index=1:numel(STATS1)
a_index=STATS1{index};
s_index=[a_index.Area];
v=zeros(1,10);
v(1:length(s_index))= s_index;
%xlswrite('Blanalys_entstanden.xlsx', v, 'Blanalys_entstanden', sprintf('A%d',index)) end
for index=1:numel(STATS2)
a2_index=STATS2{index};
s2_index=[a2_index.Area];
v2=zeros(1,10);
v2(1:length(s2_index))= s2_index;
%xlswrite('Blanalys_zerfallen.xlsx', v2, 'Blanalys_zerfallen', sprintf('A%d',index)) end
Also, überall wo im Code WICHTIG steht ist zu beachten.
Was ich im Prinzip machen will ist Pixel zu zählen. Es ist aber wichtig, dass bei der Subtraktion von den Pixel Matrizes auch negative Werte zugelassen werden. Daher die Umwandlung von uint8 zu Double.
bwconncomp funktioniert ja nicht mit Double denke ich.
Daher wollte ich nach einer Alternative fragen. Ist es möglich in einer Matrix benachbarte Double Werte (im Beispiel >0.05) zu zählen?
Danke!
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.