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

schwerpunktsberechnung von Bildern oder Matrix umwandeln

 

Quarz2200
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 18:55     Titel: schwerpunktsberechnung von Bildern oder Matrix umwandeln
  Antworten mit Zitat      
hallo zusammen,

ich habe das Problem, dass meine Ausgabedatei, in einem von mir durchgeführten Versuch, nicht mit so ist wie bisher angenommen. Ich habe eine komplettes Programm geschrieben zum einlesen einer txt-Datei, falsche Zeilen herauslöschen und anschließender Schwerpunktsberechnung. Nun allerdings spuckt mir mein Programm keine txt-Datei aus sondern Bilder. Bei der txt File hatte ich eine 3 spalten Matrix,also:
x-Koordinaten, y-Koordinaten, Intensität.

Danach dachte ich mir "nun gut matlab kann auch Bilder einlesen", aber spuckt mir nun Matrizen der größe 1024x1024 aus und der Inhalt ist nur noch die Intensität der Pixel.

Bisher habe ich
Code:
b=imread('test.bmp');

[y,x]=find(b>20);

zum einlesen der Bilder genutzt und zum finden der Werte welche eine Intensität über 20 haben.

Nun meine fragen:
1. kann mir jemand sagen wie ich die Bildmatrix in mein vorheriges Schema umschreiben kann?
oder 2. Wie kann ich aus der Bildmatrix einen Schwerpunkt berechnen?

Hoffe mein Problem ist klar geworden und Danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen


Quarz2200
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 20:49     Titel:
  Antworten mit Zitat      
ich habe mich nun mal daran versucht, meine riesen Matrix in eine Matrix meines alten Schemas umzuändern.
mein bisheriges Hauptskript lautet
Code:
clear all;
close all;

k=1;
b=imread('test.bmp');
%a=cell2mat(b);
[y,x]=find(b>20);

z=function_zet(x,y,b,k);


meine function_zet lautet
Code:
function[z]=function_zet(x,y,b,k)

 if k<=size(x)
        x_k=x(0+k,1);
        y_k=y(0+k,1);
        z_k=b(y_k,x_k);
        k=k+1;
        z=[z_k, function_zet(x,y,b,k)]
    if k==size(x)
        x_k=x(0+k,1);
        y_k=y(0+k,1);
        z_k=b(y_k,x_k);
       
       
    else
       printf('fehler in der eingabe')
    end
 end
end

wenn ich die main-file nun starte erscheint
Zitat:
Error in ==> function_zet at 3
if k<=size(x)

??? Output argument "z" (and
maybe others) not assigned
during call to
"C:\Users\...\function_zet.m
(function_zet)".

Error in ==> function_zet at 8
z=[z_k,
function_zet(x,y,b,k)]

Error in ==> alles_in_einem at
9
z=function_zet(x,y,b,k);


hier hört es nun auf, was ich noch von meinen Informatikkurs weiß.
kann man darauf aufbauen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.01.2013, 00:35     Titel:
  Antworten mit Zitat      
Hallo Quarz2200,

Ich verstehe die Beschreibung des Problems nicht.
Den Schwerpunkt einer Matrix kann man berechnen, indem man die Indices mit den Intensitäten multipliziert und danach summiert, genauso also, wie man den Schwerpunkt von drei Gewichten bestimmen würde, die an einer Stange hängen.

1024*1024 ist nicht riesig.

Was soll denn die Funktion function_zet berechnen?

SIZE(x) gibt einen Vektor zurück. Deshalb macht "if k < size(x)" wohl nicht, was Du erwartest.
0+k ist das gleiche wie k, wozu dient dann das Addieren der Null?

Die Fehlermeldung bedeutet, dass die Ausgabe gar nicht definiert wurde. Der Debugger ist dann das Mittel der Wahl um herauszufinden, was genau geschieht. Setze Breakpoints in die Funktion und lasse Matlab Zeile für Zeile laufen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Quarz2200
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2013, 11:54     Titel:
  Antworten mit Zitat      
Nochmals Hallo,

vergesst alles zuvor, habe nun noch ein bisschen herum gesucht und gebastelt. Heraus kam:
Code:
%einlesen des Bildes
i=imread('test.bmp');
%setzen aller Werte unter 20 auf 0
i(i<=20)=0;
%konvertierung der Matrixwerte in double
a=im2double(i);
%berechnung der Fläche des Bildes
ar=sum(sum(a(:,:,1)));
%berechnung des 1. Moments von x und y
mx=repmat((1:size(a,1)),size(a,2),1);
my=repmat((1:size(a,2)),1,size(a,1));
%Schwerpunktsberechnung fuer x und y
s_x=sum(sum(a(:,:,1).*mx))/ar
s_y=sum(sum(a(:,:,1).*my))/ar

dieser spuckt mir zumindest den Schwerpunkt für x heraus. Bei der y Achse kommt ein Fehler:
Zitat:
??? Error using ==> times
Matrix dimensions must agree.

Error in ==> alles_in_einem at 17
s_y=sum(sum(a(:,:,1).*my))/ar

da ich für die y achse quasi das selbe wie bei der x achse stehen habe weiß ich nicht warum es nicht geht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Quarz2200
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2013, 12:32     Titel:
  Antworten mit Zitat      
Ah ich habe den Fehler

ich musste den einen Teil noch Transponieren.
Code:
my=repmat((1:size(a,2))',1,size(a,1));


manchmal ist man echt zu doof, und ein paar Minuten nachdem man nachfragt schafft man es selber.

Trotzdem Danke Smile
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 - 2025 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.