Ich versuche, Rechtecke in einer verrauschten Bildmatrix automatisch zu erkennen. Die Werte sind binär, es gibt eine beliebige Anzahl von Rechtecken, die Kanten können aufgrund von Rauschen ein wenig unscharf sein. Ich würde gerne mit den Koordinaten der Rechtecke oder einer anderen solchen Methode enden, die es mir erlaubt, mich auf diese Bereiche zu konzentrieren.Verwenden von Computer Vision in R, um Rechtecke in verrauschten Daten zu finden
Ich habe versucht, die Hough-Transformation aus dem PET-Paket zu verwenden, aber verstehe nicht, wie man die Ausgabe interpretiert. Ich bin offen für andere Pakete oder Techniken.
library(PET)
AddRectangle<- function(df, startx, starty, cols, rows){
RectangleVector <- rep(1:cols, times = rows)
#Start Point
RectangleVector <- ncol(df)*(starty-1) + (startx-1) + RectangleVector
#Row changes
RectangleVector<- RectangleVector+ rep((0:(rows-1))*ncol(df), each = cols)
RectangleVector
}
#create matrix, this is an arbitrary example.
dfrows <- 100
dfcols <- 100
df <- matrix(0, nrow = dfrows, ncol = dfcols)
#put in rectangles
df[AddRectangle(df, startx = 3, starty = 3, cols = 10, rows =10)] <-1
df[AddRectangle(df, startx = 40, starty = 50, cols = 30, rows =20)] <-1
df[AddRectangle(df, startx = 45, starty = 10, cols = 30, rows =35)] <-1
df[AddRectangle(df, startx = 80, starty = 80, cols = 10, rows =10)] <-1
image(df,col = grey(seq(0, 1, length = 2)))
set.seed(2017)
#add in noise
noisydf<- df
#Positives
noisydf[runif(dfrows*dfcols)>0.97]<-1
#negatives
noisydf[runif(dfrows*dfcols)>0.97]<-0
#Visualise
image(noisydf,col = grey(seq(0, 1, length = 2)))
Dieser Code erstellt das folgende Bild.
Mit dem Haustiere Paket, das ich ein sehr schönes Bild zu bekommen, aber nicht wissen, was damit zu tun. Was ich gerne bekommen würde, sind so etwas wie die Koordinaten der Rechtecke. Ich bin nicht an die Hough-Transformation gebunden und jede erfolgreiche Methode ist in Ordnung.
test <- hough(noisydf)
image(test$hData)
Das Startbild wäre bitte nützlich. –
Der angegebene Code erzeugt das angezeigte Bild. Ich suche nach einer allgemeinen Methode, Rechtecke in einer verrauschten binären Matrix zu finden, so dass es kein spezifisches Bild gibt, es gibt kein Bildformat, weil ich ein Objekt der Klassenmatrix betrachte. Gibt es einen Grund, warum Sie speziell nach einem Bild fragen? Ich werde versuchen zu klären, ob Informationen fehlen. Ich bin neu in der Bildbearbeitung und entschuldige mich, wenn ich nützliche Informationen verpasst habe. –
Also willst du weiter von dem Bild sehen und die Rechtecke finden? Wenn das der Fall ist, denke ich, dass du 'cv :: connectedComponents' brauchst und setze dann einen minimalen Bereich um kleine Blobs auszuschließen. –