2013-06-10 3 views
13

어떻게 R에서이 그림을 부드럽게 할 수있어 두 개의 피크 만 남았습니까?이미지 스무딩 R

만약 이것이 1d 데이터가된다면, 나는 달리기를하거나 회귀 함수를 적합하게 할 것입니다. 그러나이 방법을 2 차원 행렬에 적용하는 것에 대한 구체적인 정보는 찾지 못했습니다. 예를 들어 stats 패키지의 filter()을 사용하려고했습니다.

또한 kriging에 대해 생각했지만 보간법에 대한 자세한 내용은 무엇입니까?

spectrogram

+0

imageJ가 좋은 점은 – baptiste

+0

입니다. 'raster' 패키지를 살펴볼 수 있습니다. –

+0

또한 귀하의 질문에 많은 연구 노력이 나타나지 않습니다. 우리는 당신이 시도한 것을 보여 주며, 당신이 이해하지 못하는 것을 지적합니다. 지금 당장 당신은 우리에게 당신을 위해 일할 것을 요구하고 있습니다. 적어도 그것이 느끼는 방식입니다. –

답변

17

패키지 spatstat 가우시안 블러 applicates blur() 기능을 보유하고있다. 이것은 대부분의 소음이 사라지고 두 개의 주요 피크가 명확하게 구별되는 방식으로 그림을 그립니다.

효과는 다음 그림에서 볼 수 있으며 특히 3 차원 플롯에서 특히 두드러집니다.

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") 
+0

왜 여기에서 작동하지 않는지 아십니까? 'rawimg = readJPEG ("church.jpg") rawimg = t (rawimg) # rawimg = rawimg [, ncol (rawimg) : 1] ]'이 오류가 나타납니다 :'[.im' (rawimg,, ncol (rawimg) : 1)의 오류 : 이 유형의 색인' –

+0

에 대해 부분 집합 연산이 정의되지 않았습니다. 흑백 이미지는 이미지가 rgb (적색, 녹색 및 파란색)의 한 채널에 대한 3 개의 행렬 목록이됩니다. 따라서 t() 명령을 사용할 수 없습니다. – nnn

11

난 당신이 래스터 패키지의 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)) 

문서는 자세한 내용을 포함한다.

+0

좋아,이 또한 그것을 할 것입니다. 이것은 나의 첫 번째 아이디어처럼 실행 중의 의미를 지닙니다. 그러나 Gauss blur는 더 나은 결과를 제공합니다. 하지만 어쨌든 대답 주셔서 감사합니다. – nnn

+0

이것은 나를 위해 완벽하게 작동합니다! :) – maycca

7

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

희망을!

+1

이것은'spatstat' 패키지의 Gauss 블러 또는'raster' 패키지의 실행 중 평균과 같은 것입니다. 중간 필터가 수직 및 수평 줄무늬를 생성하기 때문에 가우스 블러가 더 맘에 든다. 답변 해주셔서 감사합니다. 내가 검색 한 것을 성취 할 수있는 여러 가지 방법이 있다는 것을 알았다면 좋았다. – nnn

+0

@ by0이 오류가 발생하면 어떻게해야합니까? (> EBImage) install.packages의 경고 : 'EBImage'패키지를 사용할 수 없음 (R 버전 3.0.2)' –

+1

CRAN에서'EBImage'를 설치하려고합니까? 'install.packages ('EBImage')'를 사용하지 말고 대신'source ("http://bioconductor.org/biocLite.R")와 같이 Bioconductor에서 설치하십시오; biocLite ("EBImage")' – by0