Seite 1 von 1

Image prozessing/Clustering vom Bild

Verfasst: Mo Okt 22, 2018 1:24 pm
von waldoo
Hallo R-Forum,

Ich versuche für meine Abschlussarbeit image prozessing analyse durchzuführen und mir fehlt ein wenig Verständnis zum gesamten Prozess, da ich sowohl in R, als auch in image prozessing kompletter Neuling bin.
Es handelt sich um Clusteranalyse (oder etwas ähnliches).
als Input benutze ich die Bilder, die an sich die Information über die Tracerverteilung im Boden enthalten. Was ich am Endeffekt brauche: die einzelnen blauen px (mein Tracer ist auf dem Bild blau) will ich nicht betrachten. Aber wenn es mehrere px sehr nah zueinander liegen, will ich die als ein großer blauer Fleck betrachten.
Ich habe probiert mit dem Packages mmand dies Problem zu lösen, wo ich mit der funktion erode() gearbeitet habe. Der Package hat aber leider nicht so viele erweiterte Dokumentation und ich weiß leider nicht, wie ich einige Funktionen verbessern könnte.
Was ich schon gemacht habe:

Code: Alles auswählen

library(jpeg)
library(mmand)

tracer <- readJPEG("plot.jpg")
display(tracer)

tracer_thresholded <- threshold(tracer, method="kmeans") 

k <- shapeKernel(c(5,5), type="diamond")
display(erode(tracer, k))
Das Problem ist, dass Output-Datei zwar schärfer als Original ist, aber da sind immer wieder einzelnen px dabei.

Mit dem Package ClusteR habe ich auch probiert zu arbeiten, aber es geht eher nicht darum, klassische Clusteranalyse zu machen (da ich schon nur drei Farben auf dem Bild habe), sondern wirklich die einzeln stehende px nicht betrachten und aus dem Bild entfernen. Und der Package hat mir als Output-Datei genau das gleiche Bild gegeben, nur mit anderer Farbauflösung.

Code: Alles auswählen

library(ClusterR)
library(OpenImageR)
path_d = 'plot.jpg'
im_d = readImage(path_d)

im_d = resizeImage(im_d, 350, 350, method = 'bilinear')            
imageShow(im_d)   
im3 = apply(im_d, 3, as.vector)                               
dim(im3)                      
km_mb = MiniBatchKmeans(im3, clusters = 2, batch_size = 20, num_init = 10, max_iters = 500, 
                        init_fraction = 0.5, initializer = 'kmeans++', early_stop_iter = 10,
                        verbose = F)
pr_mb = predict_MBatchKMeans(im3, km_mb$centroids)
getcent_mb = km_mb$centroids
new_im_mb = getcent_mb[pr_mb, ]   
dim(new_im_mb) = c(nrow(im_d), ncol(im_d), 3)     

imageShow(new_im_mb)

Ich würde gerne eure Meinung hören, wie man vllt dieses Problem nicht nur mit mmand lösen kann, oder wie man erode() verbessern könnte und so machen könnte, dass die wirklich die einzeln liegende px nicht betrachtet, und alle anderen clustert? Oder gibt es welche andere Möglichkeiten?

Danke euch im Voraus!

Re: Image prozessing/Clustering vom Bild

Verfasst: Mo Okt 22, 2018 1:45 pm
von bigben
als Input benutze ich die Bilder
Ich glaub es wär gut, so ein Bild mal zu sehen. Und dann glaube ich wäre es gut zu verstehen, was Du anschließend mit dem Bild nach Entfernen der Einzelstehenden Pixel weiter machen willst. Nur Anschauen, oder auch was rechnen. Wenn ja, was?
Reden wir von zigtausend Bilder, die hohe Rechengeschwindigkeit eines spezialisierten Packages erforderlich machen oder kann man auch mit verschachtelten for-Schleifen durch den Blau-Kanal gehen und gemütlich Pixel für Pixel die Nachbarpixel abfragen?

Würde so etwas hier helfen: https://docs.gimp.org/en/plug-in-despeckle.html "The filter replaces each pixel with the median value of the pixels within the specified radius"

LG,
Bernhard

Re: Image prozessing/Clustering vom Bild

Verfasst: Mo Okt 22, 2018 3:23 pm
von waldoo
Hallo Bernhard,
danke für deine schnelle Antwort. Anbei ist eines von meinen Bildern.
Idealerweise wäre es nach der Entfernung von einzelnen px auch die euclidean distances zwischen den gebliebenen blauen Flecken zu finden, aber es ist nicht unbedingt. In erste Reihe steht doch die visuelle Analyse.
Die Bilder sind ganz einfach und brauchen keine spezielle Packages, um die auszulesen, wenn ich richtig deine Frage verstanden habe. Ich denke, for-Schleifen würde reichen.
Das im Gimp zu machen, habe ich nicht probiert, weiß aber nicht, ob es wirklich eine gute Lösung wäre. Ich habe ziemlich viele Bilder und dachte, dass mit R kann ich vllt dann eine Schleife definieren, die nach angegebenen Parametern das für alle Bilder berechnet.

Re: Image prozessing/Clustering vom Bild

Verfasst: Mo Okt 22, 2018 9:23 pm
von EDi
schau dir mal das imager paket an.. Würde zuest blau rausstellen (easy bei dem Bild) und dann vielleicht mit watershed drüber...