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

Wie stellt man die Entfernungen zweier Punkte dar?

 

Einspritzvorgang

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 15:41     Titel: Wie stellt man die Entfernungen zweier Punkte dar?
  Antworten mit Zitat      
Ich habe eine Matrix, welche die x- und y-koordinaten von zwei punkten pro Zeile enthält. Die punkte sind die Mittelpunkte von Kreisen, die ich auf meinem Bild gefunden habe. die erste und zweite Spalte zeigen den einen Punkt, die dritte und vierte den anderen.

Code:
  points =

427.4762  968.9869  436.1298  939.4800
410.3451  531.7527  415.7316  504.8123
289.3263  833.7752  315.2286  847.8880
 32.8322  467.8996   15.9475  456.3964
184.0949  927.8066  187.6726  898.4243
167.1554  801.0665  161.9174  801.4695
 70.6457  803.9617   50.3906  793.8978
187.0649  600.8996  190.2172  559.2566
100.6608  741.2848  113.0292  723.1275
107.4194  407.3231  110.2720  349.0485
145.1516  342.2777  139.1603  349.0192
207.9099  505.1574  210.9875  474.2046
 35.5727  686.9287   25.5995  677.6045
 66.5224  412.8655   60.7199  370.5793
 56.2066  637.5961   44.8846  634.1563
199.3653  466.6608  193.0445  465.6853
218.6190  452.8426  210.9875  474.2046
 81.8380  569.2056   81.4730  564.7555
218.9364  124.3950  213.2326   75.4309
105.9599  779.3439  114.1407  780.7945
 53.9224  524.8930   65.8658  510.9172
 73.6517  658.9759   57.3831  664.3180
 19.9922  548.0229   12.7127  541.9428
231.3526  810.2561  230.0475  834.9254
 68.1422  556.0996   60.2532  567.7775
  9.4267  564.2696   12.7127  541.9428
 10.4302  649.0322   25.3083  632.5705
 13.6125  858.7830   40.8027  860.6428
 50.4056  800.7158   50.3906  793.8978
187.6887  654.8640  159.9689  623.4049
 29.0610  484.5180   57.1913  478.6240
 41.7510  919.2462   65.8827  900.7444
109.4590  842.2688  114.1407  780.7945
 21.4602  223.1551   20.3139  173.5782
 50.5669  770.8235   50.3906  793.8978
 54.4706  598.9854   52.4174  593.4113
 27.5837  323.1575   41.3871  355.3593
 


Jetzt würde ich gerne die Entfernung der 2 Punkte aus einer Reihe in meinem Photo darstellen. Ist es möglich einen Pfeil oder eine Linie vom den ersten Koordinaten zu den zweiten zu zeichen?


KingHegi
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 19:19     Titel:
  Antworten mit Zitat      
hey,

also wenn du deine Punkte "nur" verbinden willst, probiers damit

Code:

A=rand(40,4)*1000;
 
figure(1),clf
for i=1:size(A,1)
    plot([A(i,1),A(i,3)],[A(i,2),A(i,4)])
    hold on
end
 


Musst statt A nur deine Matrix einlesen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.11.2012, 07:17     Titel:
  Antworten mit Zitat      
Moin,

in "figure" gibt es eine Arrow-Funktion. mit der man komfortabel einen Pfeil zwischen 2 Punkten ziehen kann.

Gruß

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Einspritzvorgang

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2012, 12:16     Titel:
  Antworten mit Zitat      
vielen dank, das klappt. wie kann ich den plot denn jetzt auf meinem bild anzeigen lassen? matlab spuckt mir immer einen seperaten Plot der Pfeile aus...
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 16.11.2012, 13:08     Titel:
  Antworten mit Zitat      
Auf welche Antwort beziehst du dich? Da du die Pfeile erwähnst, gehe ich davon aus, dass du Funktion aus der Figur meinst!?

Willst du nur die Matrix darstellen (also nur die Koordinaten) ohne dein Bild mit den Kreisen? Du kannst in den Kreisen auch den Mittelpunkt anzeigen lassen und den Pfeil dann auf den Mittelpunkt setzen. Die Koordinaten dazu liefert dir: >>impixelinfo

PS. Poste mal deinen Code. Das ist einfacher zu verstehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Einspritzvorgang

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2012, 13:55     Titel:
  Antworten mit Zitat      
Ich beziehe meine Frage auf die Antwort von KingHegi. ich will das bild mit den kreisen (das heißt bei mir BW2) darstellen und dort drüber die linien (oder pfeile), die den abstand darstellen.

hier mal mein vollständiger code:

Code:

I1 = imread('X:\Spray\TMFB\Messtechniken\BA_Alexander\Ergebnisse\Konturen\Butanol_300_2_1800_010_1_Konturen.tif');

I1=imcomplement(I1);
Schwellwert = 10000;
BW1=imcrop(I1, [790 1 1280 1024]);

for i=1:1024
    for j=1:490
        if BW1(i,j)<Schwellwert
            BW1(i,j)=0;
        end
    end
end
BW1=imcomplement(BW1);
figure, imshow(BW1), title('konturen (photoshop), cropped, schwellwert, imfindcircles 1');

I2 = imread('X:\Spray\TMFB\Messtechniken\BA_Alexander\Ergebnisse\Konturen\Butanol_300_2_1800_010_2_Konturen.tif');
I2=imcomplement(I2);
Schwellwert = 10000;
BW2=imcrop(I2, [790 1 1280 1024]);

for i=1:1024
    for j=1:490
        if BW2(i,j)<Schwellwert
            BW2(i,j)=0;
        end
    end
end
BW2=imcomplement(BW2);
figure, imshow(BW2), title('konturen (photoshop), cropped, schwellwert, imfindcircles 2');

 [centersDark1, radiiDark1, metricDark1] = imfindcircles(BW1,[3 16], 'ObjectPolarity', 'dark', 'Method', 'TwoStage', 'Sensitivity',0.7);
[centersBright1, radiiBright1, metricBright1] = imfindcircles(BW1,[3 15], 'ObjectPolarity', 'bright', 'Method', 'TwoStage', 'Sensitivity',0.7);

 viscircles(centersDark1, radiiDark1,'EdgeColor','b', 'LineWidth',1.5,'LineStyle','--');
viscircles(centersBright1, radiiBright1,'LineStyle','--', 'LineWidth',1.5);
 [centersDark2, radiiDark2, metricDark2] = imfindcircles(BW2,[2 16], 'ObjectPolarity', 'dark', 'Method', 'TwoStage', 'Sensitivity',0.7);
[centersBright2, radiiBright2, metricBright2] = imfindcircles(BW2,[3 15], 'ObjectPolarity', 'bright', 'Method', 'TwoStage', 'Sensitivity',0.7);

viscircles(centersDark2, radiiDark2,'EdgeColor','b', 'LineWidth',1.5);
viscircles(centersBright2, radiiBright2,'LineWidth',1.5);



% Label Radius
for k = 1:length(metricDark2)
    radiiD2_string = sprintf('%d',radiiDark2(k));
    text(centersDark2(k,1),centersDark2(k,2),radiiD2_string,'color','b','HorizontalAlignment', 'center','VerticalAlignment', 'middle');
end
for k = 1:length(metricBright2)
    radiiB2_string = sprintf('%d',radiiBright2(k));
    text(centersBright2(k,1),centersBright2(k,2),radiiB2_string,'color','r','HorizontalAlignment', 'center','VerticalAlignment', 'middle');
end

%Berechnung der Matrix
mD1 = [radiiDark1 centersDark1]
mD2 = [radiiDark2 centersDark2]

mB1 = [radiiBright1 centersBright1]
mB2 = [radiiBright2 centersBright2]

%Matrizen miteinander vergleichen
RV = 2; %Veränderung des Radius
d_x_max = 50; %Abstand in der x-koordinate
d_x_min = 5;
d_y = 65; %Abstand in der y-koordinate
drinnenD = zeros(size(mD1,1),1);
for I = 1:size(mD1, 1)
    differenzRadiiD = abs(bsxfun(@minus, mD1(I,1), mD2(:,1)));
    diffXD=bsxfun(@minus, mD1(I,2), mD2(:,2));
    diffYD=bsxfun(@minus, mD1(I,3), mD2(:,3));
    drinnenD(I) = any(differenzRadiiD(:,1) < RV & diffXD < d_x_max & diffYD < d_y & diffXD <= d_x_min & diffYD >= 0);
end
nnz(drinnenD)

centersD1_gefunden = [mD1(:,2).*drinnenD mD1(:,3).*drinnenD]
metricD1_gefunden = metricDark1.*drinnenD
radiiD1_gefunden = radiiDark1.*drinnenD
for k = 1:length(metricD1_gefunden)
    if radiiD1_gefunden(k) > 0
    radiiD1_string = sprintf('%d',radiiD1_gefunden(k));
    text(centersDark1(k,1),centersDark1(k,2),radiiD1_string,'color','b','HorizontalAlignment', 'center','VerticalAlignment', 'middle');
    end
end
drinnenB = zeros(size(mB1,1),1);
for I = 1:size(mB1, 1)
    differenzRadiiB = abs(bsxfun(@minus, mB1(I,1), mB2(:,1)));
    diffXB=bsxfun(@minus, mB1(I,2), mB2(:,2));
    diffYB=bsxfun(@minus, mB1(I,3), mB2(:,3));
    drinnenB(I) = any(differenzRadiiB(:,1) < RV & diffXB < d_x_max & diffYB < d_y & diffXB <= d_x_min & diffYB >= 0);
end
nnz(drinnenB)

centersB1_gefunden = [mB1(:,2).*drinnenB mB1(:,3).*drinnenB]
metricB1_gefunden = metricBright1.*drinnenB
radiiB1_gefunden = radiiBright1.*drinnenB
for k = 1:length(metricB1_gefunden)
    if radiiB1_gefunden(k) > 0
    radiiB1_string = sprintf('%d',radiiB1_gefunden(k));
    text(centersBright1(k,1),centersBright1(k,2),radiiB1_string,'color','r','HorizontalAlignment', 'center','VerticalAlignment', 'middle');
    end
end

centersB1_gefunden(all(centersB1_gefunden==0,2),:)=[]
for A = 1:size(centersB1_gefunden)
    diffGefunden = bsxfun(@minus, centersB1_gefunden(A,:), centersBright2(:,:));
    diffDiff = sum(abs(diffGefunden),2)
    [lowestDiff,index] = min(diffDiff)
    centersB2_gefunden(A,:)=centersBright2(index,:)
end

points = [centersB1_gefunden centersB2_gefunden]

A=rand(40,4)*1000;
 
figure(1),clf
for i=1:size(points,1)
    plot([points(i,1),points(i,3)],[points(i,2),points(i,4)])
    hold on
end
 
 
KingHegi
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 12:57     Titel:
  Antworten mit Zitat      
also wenn es nur um die Darstellung in einem figure geht, versuch mal nach deinem code

Code:
figure, imshow(BW2), title('konturen (photoshop), cropped, schwellwert, imfindcircles 2');


ein

Code:


zu setzen und weiter unten in meinem Teil das

Code:


zu löschen



natürlich musst du noch das

Code:
A=rand(40,4)*1000;


durch

Code:


ersetzen
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.