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

Mitte in Zahlenfolge bestimmen

 

Anna345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 08:22     Titel: Mitte in Zahlenfolge bestimmen
  Antworten mit Zitat      
Code:
Vektor = [0 0 0[b] 1 1 1[/b] 0 0 0 [b]1 1[/b] 0 0 0 0 0 [b] 1 1 1 [/b];

for k = 1:length(Vektor)
if (Vektor(k) == 1 && Vektor(k+1)== 1)
x = mean (k,k+1);
end  
end


Hallo,
ich habe obigen Code geschrieben. Und möchte jeweils die Position der mittleren 1 bestimmen und in einer Variablen abspeichern. Leider komme ich nicht auf das Ergebnis.
Kann mir jemand sagen, was falsch ist?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2018, 09:26     Titel:
  Antworten mit Zitat      
Hallo,

mir ist noch nicht ganz klar, welche Ergebnisse der Code hier liefern soll.
5, 10.5, 18 ?

Ein Problem in deinem Code ist, dass du aus k und k+1 erst einen Vektor formen musst. Ein weiteres ist, dass du x ständig überschreibst. Und dann noch, dass die Schleife einen Schritt zu weit läuft ;)
Code:
x = [];
for k = 1:length(Vektor)-1
if (Vektor(k) == 1 && Vektor(k+1)== 1)
x(end+1) = mean ([k,k+1]);
end  
end


So läuft der Code durch. Jetzt ist aber wie gesagt die Frage, ob das tatsächlich das gewünschte Ergebnis ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Volterra
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 09:51     Titel:
  Antworten mit Zitat      
Code:
clc;
close all;
clear all;

y = 504; %Y-Abschnitt grüne Linie

load('matrix1.mat') %Matrix laden
a = matrix1(2,:); %Zeile 1 einlesen
image1a = imread('image.tif'); %Bild laden
image1a = imresize(image1a, [596*1.3867, 1008*1.3867]); %Bild skalieren

[row, col]= find(image1a==255); %Pixel finden, die grün sind
imshow(image1a) %Bild anzeigen
hold on
matrix = zeros(size(image1a)); %Matrix mit Größe von image1a erstellen

for k=1:length(matrix1)  %Zeile mit Werten aus Matrix füllen
    matrix(y,k+111) = posidx2Lin(2,k);
end

% for n=length(image1a(:,1)) %Y Wert automatisch bestimmen
% if (image1a(115,n) == 255 || matrix(115,n) ~= 155 || matrix(115,n) ~= 170)
% y1 = n;
% end
% end

for k=1:length(matrix1) %Zeile mit Werten füllen
   
if(matrix(y,k)== 1 || image1a(y,k)== 255)  %wenn beide Bedingungen erfüllt sind Kreis zeichnen
% diamter = length (k==1);
% radius = diamter/2;
radius= 3;
x = k; %X Koordinaten Kreis
th = 0:pi/50:2*pi;
xunit = radius * cos(th) + x;
yunit = radius * sin(th) + y;
h = plot(xunit, yunit);
x=x+1;
end

end

impixelregion
hold off


Hallo,
das ist der ganze Code. Es soll die Dicke der Gefäße mit Hilfe eines Kreises bestimmt werden. Ob sich ein Gefäß dort befindet wird durch eine 0 oder 1 in der Matrix angegeben und dementsprechend soll ein Kreis in die Grafik gelegt werden.

image.tif
 Beschreibung:

Download
 Dateiname:  image.tif
 Dateigröße:  1.72 MB
 Heruntergeladen:  420 mal
matrix1.mat
 Beschreibung:

Download
 Dateiname:  matrix1.mat
 Dateigröße:  574 Bytes
 Heruntergeladen:  307 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2018, 10:42     Titel:
  Antworten mit Zitat      
Hallo,

und worin besteht nun deine weitere Frage?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Volterra
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 10:44     Titel:
  Antworten mit Zitat      
Jetzt werden mir ja immer mehrere Kreise gezeichnet und es soll pro Abschnitt an 1en nur einer in der Mitte des Abschnittes gezeichnet werden:
z.B. [0 0 0 0 1 1 1 1 1 0 0 ] soll ein Kreis mit dem Mittelpunkt der mittleren 1 gezeichnet werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2018, 10:52     Titel:
  Antworten mit Zitat      
Hallo,

und welchen Code verwendest du aktuell?

Ich warte übrigens noch auf eine Antwort auf die Frage, welche Ergebnisse du in deinem Beispiel erwartest...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Volterra
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 11:09     Titel:
  Antworten mit Zitat      
Code:
for k=1:length(matrix1) %Zeile mit Werten füllen
   
if(matrix(y,k)== 1 || image1a(y,k)== 255)  %wenn beide Bedingungen erfüllt sind Kreis zeichnen
% diamter = length (k==1);
% radius = diamter/2;
radius= 3;
x = k; %X Koordinaten Kreis
th = 0:pi/50:2*pi;
xunit = radius * cos(th) + x;
yunit = radius * sin(th) + y;
h = plot(xunit, yunit);
x=x+1;
end


diesen verwende ich aktuell, das hängt mit meiner ersten Frage zusammen. Ich brauche keinen Wert sondern die Position der mittleren 1.
danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2018, 11:15     Titel:
  Antworten mit Zitat      
Hallo,

und wenn es eine gerade Anzahl von Einsen ist, welches Ergebnis möchtest du dann?

Oder nun zum dritten:
Möchtest du in deinem Beispiel als Ergebnis 5, 10.5, 18 ? Wenn nicht, was dann?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Volterra
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 11:21     Titel:
  Antworten mit Zitat      
genau, das möchte ich als Ergebnis: 5,10.5, 18
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2018, 13:02     Titel:
  Antworten mit Zitat      
Hallo,

dann so:
Code:
start1 = find(Vektor(1:end-1) == 0 & Vektor(2:end) == 1) + 1;
end1 = find(Vektor(1:end-1) == 1 & Vektor(2:end) == 0);
if Vektor(1) == 1
    start1 = [1, start1];
end
if Vektor(end) == 1
    end1 = [end1, numel(Vektor)];
end

pos = (start1 + end1) / 2


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Volterra
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 14:08     Titel:
  Antworten mit Zitat      
Vielen Dank. Hat mir sehr geholfen
Private Nachricht senden Benutzer-Profile anzeigen
 
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.