Сглаживание изображения в R
Как сгладить это изображение в R, чтобы остались только два пика?
Если это будет 1d данных, я бы выполнил среднее значение или применил функцию регрессии. Но я не нашел очень конкретной информации об использовании этих методов на 2d-матрице. Например, я попытался использовать filter()
из пакета stats
.
Я также думал о кригинге, но это больше о интерполяции, не так ли?
![spectrogram]()
Ответы
Ответ 1
В пакете spatstat
имеется функция blur()
, которая применяет гауссовское размытие. Это унижает картину таким образом, что большая часть шума исчезает, и два основных пика четко различимы.
Эффект можно увидеть на следующем рисунке и весьма примечателен, особенно на трехмерном графике.
![effects of blurring]()
Код для создания изображения:
library(jpeg)
library(fields)
library(spatstat)
picture <- readJPEG("~/Downloads/spectrogram.png.jpeg")
picture2 <- as.matrix(blur(as.im(picture), sigma=6))
layout(matrix(c(1:4), nrow=2))
image.plot(picture, col=gray.colors(50), main="original image", asp=1)
image.plot(picture2, col=gray.colors(50), main="blurred with sigma = 6", asp=1)
drape.plot(1:nrow(picture), 1:ncol(picture), picture, border=NA, theta=0, phi=45, main="original spectrogram")
drape.plot(1:nrow(picture), 1:ncol(picture), picture2, border=NA, theta=0, phi=45, main="blurred with sigma = 6")
Ответ 2
Я думаю, вам стоит взглянуть на функцию focal
в растровом пакете. Например (скопировано из документации raster
):
r <- raster(ncols=36, nrows=18, xmn=0)
r[] <- runif(ncell(r))
# 3x3 mean filter
r3 <- focal(r, w=matrix(1/9,nrow=3,ncol=3))
В документации содержится более подробная информация.
Ответ 3
Вы определенно хотите взглянуть на пакет EBImage
. Существует несколько функций для сглаживания изображения.
Например, медианный фильтр:
# Load EBImage up
require(EBImage)
# Read in your image
im = readImage('/path/to/your/image')
# Apply a median filter with window size of 7
im.med = medianFilter(im, size=7)
# Display image
display(im.med)
![Median filter applied with 7x7]()
или вы можете попробовать гауссовское размытие:
# Apply a gaussian blur with sigma=4
im.gaus = gblur(im, sigma=4)
# Display image
display(im.gaus)
![enter image description here]()
Надеюсь, это поможет!