Image prozessing/Clustering vom Bild
Verfasst: Mo Okt 22, 2018 1:24 pm
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:
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.
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!
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))
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!