Я пытаюсь автоматически обнаруживать прямоугольники в матрице шума. Значения двоичные, есть произвольное количество прямоугольников, края могут быть немного нечеткими из-за шума. Я хотел бы получить координаты прямоугольников или какой-либо другой такой метод, позволяющий мне сосредоточиться на этих областях.Использование зрения компьютера в R для поиска прямоугольников в шумных данных
Я пытался использовать преобразование Hough из пакета PET, но не понимаю, как интерпретировать вывод. Я открыт для других пакетов или методов.
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)))
Этот код создает следующее изображение.
Использование пакета домашних животных я получаю очень хорошее представление, но не знаю, что делать с ним. То, что я хотел бы получить, - это что-то вроде координат прямоугольников. Я не привязан к преобразованию Хафа, и любой успешный метод в порядке.
test <- hough(noisydf)
image(test$hData)
Начальный образ будет полезен, пожалуйста. –
Приведенный код генерирует изображение. Я ищу общий метод поиска прямоугольников в шумной двоичной матрице, поэтому нет конкретного изображения, нет формата изображения, потому что я смотрю на объект класса. Есть ли причина, по которой вы запрашиваете изображение? Я попробую и уточню, если информация отсутствует. Я новичок в обработке изображений, так что извиняюсь, если я пропустил полезную информацию. –
Итак, вы хотите продолжить работу с изображенного изображения и найти прямоугольники? Если это так, я думаю, вам нужно 'cv :: connectedComponents', а затем установить минимальную область, чтобы исключить небольшие капли. –