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

Hilfe, Bildbearbeitung

 

Psyduck
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 05.03.20
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 05.03.2020, 21:38     Titel: Hilfe, Bildbearbeitung
  Antworten mit Zitat      
Guten Abend,
ich bin aktuell an einer Arbeit dran.
Es geht darum Dicom *dcm Dateien, einzulesen, einmal auszugeben, dann zu beschneiden und zu analysieren.
Nun was heißt das, es gibt eine Kugel auf einer Platte zu testzwecken, und die Platte soll aus dem Bild ermittelt werden, wie auch radius und mittelpunkt der Kugel:

Code:


%Einlesen des Ordners
srcFile=dir('pfad\*.dcm')

for i=1:length(srcFile)
    filename=strcat('pfad\',srcFile(i).name);
  sort(filename)
  Image=dicomread(filename);
  end
 
%Bild anzeigen
 subplot(2,3,1)
 imshow(Image,[])
 imagesc(Image,[]);
 
%Zuschneiden des Bildes auf genannten Bereich
 subplot(2,3,2)
 J = imcrop(Image,[487 487 49 49]);
 imshow(J,[]);
 imagesc(J,[]);
 
% Histogramm des Bildes anzeigen
%Histo für Speicherung als Wert
 subplot(2,3,3)
 imhist(20*J,512)
 
%Cirlce Detection
 K=J
 subplot(2,3,4)
 imshow(K,[])
%Minimum und Maximum radius
 Rmin=10;
 Rmax=15;
%Apply Hough Circle
 [centersDark1, radiiDark1]=imfindcircles(K,[Rmin,Rmax],'ObjectPolarity','dark','Sensitivity',0.95);
%Anzeigen des Kreises,mit Linienstil
 viscircles (centersDark1, radiiDark1,'LineStyle','-')
 
 %Darstellung der Kanten mittels Edge Detection
subplot(2,3,5)
BW=J;
c=edge(BW,'canny');
imshow(c)

%Erkennung der Kanten mittels BWboundaries
[B,L,N] = bwboundaries(c);
imshow(c);
hold on;
for k=1:length(B),
 
   boundary = B{k};
   if(k > N)
     plot(boundary(:,2), boundary(:,1), 'g','LineWidth',1);
   else
     plot(boundary(:,2), boundary(:,1), 'r','LineWidth',1);
   end
end

subplot(2,3,6)
spy(N)
spy(L)

figure(2)
subplot(2,1,1)
mesh(L)
L(find(L>1))=0


%Festlegung der Var(Bereiche)
Bereich1=L
Bereich2=L
Bereich3=L
Bereich4=L
Bereich5=L

%Erkennen der Vertikalen
figure(4)
subplot(3,3,1)
 for iRow = 1:size(L, 1)
  ini = find(L(iRow, :), 1, 'first');
  fin = find(L(iRow, :), 1, 'last');
  L(iRow, ini+1:fin-1) = 0;
end


%Linker Rand der Platte
subplot(3,3,2)
 for iCow = 1:size(Bereich1, 1)
  ini = find(Bereich1(iCow, :), 1, 'first');
  fin = find(Bereich1(iCow, :), 1, 'last');
  Bereich1(iCow, ini+1:fin+1) = 0;
end
spy(Bereich1)
mean(Bereich1) %Mitteln des Bereich

%Rechter Rand der Platte
subplot(3,3,3)
 for iCow = 1:size(Bereich2, 1)
  ini = find(Bereich2(iCow, :), 1, 'first');
  fin = find(Bereich2(iCow, :), 1, 'last');
  Bereich2(iCow, ini-1:fin-1) = 0;
end


%Erkennen der Vertikalen
subplot(3,3,4)
 for iCow = 1:size(Bereich3, 2)
  ini = find(Bereich3(:, iCow), 1, 'first');
  fin = find(Bereich3(:, iCow), 1, 'last');
  Bereich3(iCow, ini+1:fin-1) = 0;
end


%Oberer Rand der Platte
subplot(3,3,5)
 for iCow = 1:size(Bereich4, 2)
  ini = find(Bereich4(:, iCow), 1, 'first');
  fin = find(Bereich4(:, iCow), 1, 'last');
  Bereich4(ini+1:fin+1,iCow) = 0;
end

%Unterer Rand der Platte
subplot(3,3,6)
 for iCow = 1:size(Bereich5, 2)
  ini = find(Bereich5(:, iCow), 1, 'first');
  fin = find(Bereich5(:, iCow), 1, 'last');
  Bereich5(ini-1:fin-1,iCow) = 0;
end

 


Nun wie erkennbar, habe ich ein Histogramm erstellt, und versucht über Edge die Kanten erkennen zu lassen, was soweit erstmal richtig ist.
Nun soll ich die Einsen, welche als Rand angezeigt werden, in ihrer Position ausgegeben und dann mitteln, damit ich die Mittelpunkte der geraden habe.

Das Problem ist, ich arbeite selten mit Octave und hab echt keine Ahnung wie ich es weiter umsetzen kann, bzw viel besser machen kann, der Code wirkt nämlich nicht wirklich "gut"
Eventuell kann mir jemand helfen
Danke schon mal^^
_________________

Liebe Grüße
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.