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

Smoothness Brush

 

clustering_n00b
Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 10.12.2012, 20:29     Titel: Smoothness Brush
  Antworten mit Zitat      
Hallo zusammen!


Ich mache mich gerade an intensive Bildbearbeitung heran, und zwar habe ich ein GUI kreeiert, wo ein Bild angezeigt wird.

Danach soll der User gewisse Teile des Bildes (z.B Regionen mit Spikes) markieren mit einer Ellipse oder Recheck (verschiedener Grössen) glätten können, sehr ähnlich wie Photoshop.

Dieses Segment soll nun gespeichert werden. Darauf kann man einen Smoothness-Filter anwenden und das Segment mit dem Resultat ersetzen.

Dieses neue Bild soll dann gespeichert werden.



Weiss jemand wie das zu implementieren ist (speziell der Smoothing-Teil)?

clustering_n00b
Private Nachricht senden Benutzer-Profile anzeigen


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 21:50     Titel:
  Antworten mit Zitat      
Suchst du das:
http://en.wikipedia.org/wiki/Gaussian_blur
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 10.12.2012, 21:58     Titel:
  Antworten mit Zitat      
Hey dmjr!


Was ähnliches - ja.
Am besten man hat viele Möglichkeiten.
So was wie das hier sieht gut aus:
Link


Bevor ich den Filter anwende, muss ich die von User gewählte Stelle speichern - wie mache ich das?
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: 11.12.2012, 12:45     Titel:
  Antworten mit Zitat      
Moin,

es gibt die Funktion: >>roifilt. Da wird ein Rahmen gezogen und eine Funktion bearbeitet den eingerahmten Bildausschnitt. Zum smoothen geht fspecial + 'gaussian', oder: >>roifill. Es gibt viele Funktionen, die letztlich das gleiche machen. Oder hast du ein bestimmtes Ziel?

Wenn du aber den Ausschnitt als separates Bild bearbeiten und diesen bearbeiteten Bereich wieder auf das Originalbild übertragen willst (so habe ich deine Anfrage verstanden) wird es eher nicht einfach - da transparent überlagern keine optimalen Ergebnisse liefert. Es müsste eine Funktion sein, die den Bildbereich tauscht - also nicht überlagert.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 11.12.2012, 13:13     Titel:
  Antworten mit Zitat      
Hi Hubertus!

Ja, stimmt. roifilt hatte ich auch schon gesehen.

fspecial mit gaussian ergibt ein Gauss-Filter. Was ist aber mit dem Linear/Median und Adaptive Filtern, die hier beschrieben sind?

Ich habe mal ein Sample herausgeladen, wo man unten die richtigen Bilder und in der oberen Reihe die deformierten Bilder sieht.

Die 2 oberen Bildern haben eine falsche Einbuchtung, die durch User-Input eliminiert werden soll.

Ich dachte mir, ich könnte die vom User markierte Stelle speichern, glätten und danach die entsprechenden Matrixwerte mit den neuen ersetzen (anstatt Bildüberlagerung zu machen).


Was meinst du?



EDIT: roifilt2 sieht doch gut aus.

Zitat:
roifilt2 filters the input image and returns an image that consists of filtered values for pixels where the binary mask contains 1s and unfiltered values for pixels where the binary mask contains 0s. This type of operation is called masked filtering


Also kann ich dem roifilt2 einen Mask übergeben, der 1 enthält für Regionen, die vom User markiert wurden und geglättet werden müssen und 0 sonst.

Stichwort: Creating a Mask

Sample Image.png
 Beschreibung:

Download
 Dateiname:  Sample Image.png
 Dateigröße:  266.92 KB
 Heruntergeladen:  668 mal


Zuletzt bearbeitet von clustering_n00b am 11.12.2012, 13:28, insgesamt einmal bearbeitet
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: 11.12.2012, 13:27     Titel:
  Antworten mit Zitat      
Ich habe die Vermutung, dass du unter Glätten so etwas wie Verflüssigen (Photoshop) verstehst. Keines der Filter wird die Aufgabe erledigen. So ist z.B. der Median-Filter nur gegen Impulsrauschen. Alle anderen Glättungsfunktionen unterscheiden sich kaum von der Funktion 'gaussian'. Wenn ich dein Problem richtig verstanden habe, müsste man die Bildbereiche vektorisieren (als Vektorgrafik - wie CorelDraw) und dann verformen oder
man löscht bestimmte Bereiche weg und erzielt dadurch eine andere Form. Das Löschen ist noch am einfachsten.
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 11.12.2012, 13:48     Titel:
  Antworten mit Zitat      
Ich habe man laut dem Tutorial (ROIPolygon, Maske erstellen, Median Filter drauf) folgendes versucht um das Logo an der Jacke wegzukriegen.

Code:

img = imread('pout.tif');
I = imshow(img);
h = imfreehand(gca);
BM = createMask(h, I);
imsize = size(imread('pout.tif'));
f = @(x) medfilt2(x,[3 3]);

I2 = roifilt2(img,BW,f);

figure; imshow(I2)

 


Das hat tatsächlich nichts gebracht (siehe Attachment).


Könntest du vielleich genauer werden, Hubertus?
Ist das Glätten in MATLAB nicht möglich?

Medianfilter Test.png
 Beschreibung:

Download
 Dateiname:  Medianfilter Test.png
 Dateigröße:  91.84 KB
 Heruntergeladen:  680 mal
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: 11.12.2012, 13:57     Titel:
  Antworten mit Zitat      
Es kommt darauf an, was wir beide unter Glätten verstehen! Ich verstehe darunter das Angleichen der Pixelwerte bis zu einem Grad der Verschmierung, ähnlich der Gauss-Funktion. Das Glätten bewirkt weniger Rauschen, eliminiert Impulsrauschen und geht auf Kosten der Bildschärfe. Eine falsche Kurve bleibt in jedem Fall eine falsche Kurve. Um, diese in eine richtige Form zu bringen müssen zusammenhängende Pixel (also Vektoren) an eine andere Position gebracht werden. Es gibt in Matlab so etwas wie Warping.

Habe ich das richtig verstanden oder meinst du etwas anderes?
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 11.12.2012, 14:04     Titel:
  Antworten mit Zitat      
Ich habe jetzt mit der roifill Funktion die eine Ausbuchtung (im Rot-Bereich) was glätten können (siehe Attachment).
Das Resultat ist besser, aber nicht hervorragend.


Warping ist, soweit ich es verstanden habe, so was wie Rotation des Bildes. Du meinst jetzt also wahrscheinlich, dass man danach noch die richtigen Winkel für die Rotation bestimmen muss.


Was würdest generell empfehlen (die Bildschärfe möchte ich nicht umbedingt aufopfern)?
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: 11.12.2012, 14:33     Titel:
  Antworten mit Zitat      
Jetzt hat es geklingelt. Ich weiß was du meinst. Vergesse Warping!

Auf jeden Fall würde ich nicht auf dem gesamten Bild arbeiten, sondern auf dem jeweiligen Farbkanal. Damit du möglichst viele Varianten probieren kannst, empfehle ich die Funktion "DetectLines.m" (Quelle: stackoverflow.com) Da sind sehr viele Funktionen eingebettet, mit denen man ein optimalöes Ergebnis erzielen müsste. Ich kann sie dir von diesem Rechner nicht zusenden. Wenn du sie nicht findest, werde ich sie später hier posten.

Code:
I=imread('Farbbild.tif');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
BW=roipoly(R);  % für den Fehler im Rotbereich
BW1=not(~BW);
N=roifill(I,BW1);
Segout=DetectLines(N);  % Funktionen im M-Files festlegen
X=cat(3,Segout,G,B);
figure; imshow(X)


Mit diesen Funktionen müsste das gehen.
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: 12.12.2012, 07:19     Titel:
  Antworten mit Zitat      
Ich konnte dein Bild erst jetzt auf dem Matlab-Rechner testen und komme auf eine einfachere Lösung. Dazu brauchst du die Funktionen: RGB2Lab.m und Lab2RGB.m .Die kannst du im File Exchange laden und arbeitest dann auf dem Luminanzkanal.

Der Weg:

Code:
I=imread('Sample Image.png');
figure; imshow(I)
I2=RGB2Lab(I);
I3=I2(:,:,1);
mask=roipoly;
I4=fspecial('gaussian',30,10); % die Werte sind bei einem Einzelbild dann höher
I5=roifilt2(I4,I3,mask);
I2(:,:,1)=I5;
I6=Lab2RGB(I2);
figure; imshow(I6)
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.