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

App Designer, regionprops

 

wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 01.07.2021, 00:10     Titel: App Designer, regionprops
  Antworten mit Zitat      
Hallo!
Ich versuche das "spottedRegions" Edit Field mit der Anzahl der Objekte zu füllen. Im einfachen Skript funktioniert das bereits bei mir mit der Ausgabe von N_objects (number of objects):
Code:

imageRGB = imread('shapes.jpg');

% RGB --> Graustufen
imageGray = rgb2gray(imageRGB);

% Graustufen --> Binärbild (Schwarz/Weiß)
imageBinary = imbinarize(imageGray);
figure;
imshow(imageBinary); title('Binary Image');

[B,~,~] = bwboundaries(imageBinary);
N_objects = length(B)-1           % Anzahl der Objekte im Bild
 


Im App Designer habe ich bisher wenig gemacht. Wie kriege ich in meinem Ausgabefeld für "spottedRegions" die N_objects angezeigt - also nachdem ich OpenRGBimage gedrückt habe?
Die Function zu diesem Button:
Code:

        function OpenButtonPushed(app, event)
            imageRGB = imread('shapes.jpg');
            imshow(imageRGB, 'Parent', app.UIAxes);            
        end
 

Ganzer App Designer Code:
Code:

classdef shapesProperties < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure                      matlab.ui.Figure
        CreateBinaryImageButton       matlab.ui.control.Button
        OpenButton                    matlab.ui.control.Button
        spottedRegionsEditField       matlab.ui.control.EditField
        spottedRegionsEditFieldLabel  matlab.ui.control.Label
        regionIndexSpinner            matlab.ui.control.Spinner
        regionIndexSpinnerLabel       matlab.ui.control.Label
        UIAxes2                       matlab.ui.control.UIAxes
        UIAxes                        matlab.ui.control.UIAxes
    end

   
    methods (Access = public)
       
    end
   

    % Callbacks that handle component events
    methods (Access = private)

        % Button pushed function: OpenButton
        function OpenButtonPushed(app, event)
            imageRGB = imread('C:\Users\Admin\Documents\MATLAB\Dennis\shapes.jpg');
            imshow(imageRGB, 'Parent', app.UIAxes);            
        end

        % Button pushed function: CreateBinaryImageButton
        function CreateBinaryImageButtonPushed(app, event)
            imageRGB = imread('C:\Users\Admin\Documents\MATLAB\Dennis\shapes.jpg');
            % RGB --> Graustufen
            imageGray = rgb2gray(imageRGB);
            % Graustufen --> Binärbild (Schwarz/Weiß)
            imageBinary = im2bw(imageGray);
            imshow(imageBinary, 'Parent', app.UIAxes2);
           

        end

        % Value changed function: spottedRegionsEditField
        function spottedRegionsEditFieldValueChanged(app, event)
            value = app.spottedRegionsEditField.Value;
            % value = N_objects;
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'MATLAB App';

            % Create UIAxes
            app.UIAxes = uiaxes(app.UIFigure);
            title(app.UIAxes, 'RGB Image')
            app.UIAxes.Visible = 'off';
            app.UIAxes.Position = [16 283 300 185];

            % Create UIAxes2
            app.UIAxes2 = uiaxes(app.UIFigure);
            title(app.UIAxes2, 'Binary Image')
            app.UIAxes2.Visible = 'off';
            app.UIAxes2.Position = [315 283 300 185];

            % Create regionIndexSpinnerLabel
            app.regionIndexSpinnerLabel = uilabel(app.UIFigure);
            app.regionIndexSpinnerLabel.HorizontalAlignment = 'right';
            app.regionIndexSpinnerLabel.Position = [366 230 68 22];
            app.regionIndexSpinnerLabel.Text = 'regionIndex';

            % Create regionIndexSpinner
            app.regionIndexSpinner = uispinner(app.UIFigure);
            app.regionIndexSpinner.Position = [449 230 69 22];

            % Create spottedRegionsEditFieldLabel
            app.spottedRegionsEditFieldLabel = uilabel(app.UIFigure);
            app.spottedRegionsEditFieldLabel.HorizontalAlignment = 'right';
            app.spottedRegionsEditFieldLabel.Position = [143 230 89 22];
            app.spottedRegionsEditFieldLabel.Text = 'spottedRegions';

            % Create spottedRegionsEditField
            app.spottedRegionsEditField = uieditfield(app.UIFigure, 'text');
            app.spottedRegionsEditField.ValueChangedFcn = createCallbackFcn(app, @spottedRegionsEditFieldValueChanged, true);
            app.spottedRegionsEditField.Position = [247 230 40 22];

            % Create OpenButton
            app.OpenButton = uibutton(app.UIFigure, 'push');
            app.OpenButton.ButtonPushedFcn = createCallbackFcn(app, @OpenButtonPushed, true);
            app.OpenButton.Position = [12 230 108 22];
            app.OpenButton.Text = 'OpenRGB-Image';

            % Create CreateBinaryImageButton
            app.CreateBinaryImageButton = uibutton(app.UIFigure, 'push');
            app.CreateBinaryImageButton.ButtonPushedFcn = createCallbackFcn(app, @CreateBinaryImageButtonPushed, true);
            app.CreateBinaryImageButton.Position = [12 184 123 22];
            app.CreateBinaryImageButton.Text = 'CreateBinary-Image';

            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = shapesProperties

            % Create UIFigure and components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end
 

Viele Grüße
Michael

Bild_a.png
 Beschreibung:
Bild App Designer Ausgabe so weit

Download
 Dateiname:  Bild_a.png
 Dateigröße:  16.24 KB
 Heruntergeladen:  230 mal
shapes.jpg
 Beschreibung:
Einzulesendes Bild

Download
 Dateiname:  shapes.jpg
 Dateigröße:  11.49 KB
 Heruntergeladen:  223 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2021, 22:21     Titel:
  Antworten mit Zitat      
Hallo,

ich hätte gesagt:
Code:
app.spottedRegionsEditField.Value = N_objects;


Ist es denn sinnvoll, dafür einen neuen Wert einzugeben? Falls nicht und der Wert nur angezeigt werden soll, würde ich eher ein Label verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 02.07.2021, 05:21     Titel:
  Antworten mit Zitat      
Vielen Dank, Harald!
Ich habe auch versucht, den Formen eine Nummer zuzuweisen (ohne die des Hauptbildes, d.h. des weißen Rechtecks), aber meine Schleife funktioniert nicht. Ich erhalte nur die "1" für das Hauptbild.

Code:

        function OpenButtonPushed(app, event)
            imageRGB = imread('C:\Users\Admin\Documents\MATLAB\Dennis\shapes.jpg');
            imshow(imageRGB, 'Parent', app.UIAxes);            
            % RGB --> Graustufen
            imageGray = rgb2gray(imageRGB);
            % Graustufen --> Binärbild (Schwarz/Weiß)
            imageBinary = im2bw(imageGray);
            [Bnd,L,N,A] = bwboundaries(imageBinary);
            N_objects = length(Bnd)-1;
            app.spottedRegionsEditField.Value = num2str(N_objects);
           
            [L,n] = bwlabel(imageBinary);
           
            hold on
            for k = 1:numel(N_objects)      % versuchte auch 'numel(N_objects)+1' to um Hauptbild auszulassen, erfolglos
               % [L,n] = bwlabel(Bnd{k});
               s = regionprops(L);
               c = s(k).Centroid;           % s(k+1) hat nicht funktioniert
               text(app.UIAxes, c(1), c(2), sprintf('%d', k), ...
               'HorizontalAlignment', 'center', ...
               'VerticalAlignment', 'middle', 'color', 'red');
            end
        end
 


Was ich vorhabe, ist, einen Spinner zu verwenden, der einen Index einer erkannten Region auswählt und diesen extrahiert in einer anderen Grafik anzeigt. Wie könnte ich das machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was genau funktioniert inwiefern nicht? Man braucht entweder ein reproduzierbares Beispiel oder eine sehr genaue und konkrete Problembeschreibung um hier weiterhelfen zu können.

Zitat:
Ich erhalte nur die "1" für das Hauptbild.

Ich habe keine Ahnung, wo du das erhältst und was du stattdessen erhalten willst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.