2013-06-10 37 views
13

Làm thế nào tôi có thể làm mịn hình ảnh này trong R, sao cho chỉ có hai đỉnh vẫn còn?Làm mịn hình ảnh trong R

Nếu đây là dữ liệu 1d, tôi sẽ thực hiện hoạt động trung bình hoặc phù hợp với chức năng hồi quy. Nhưng tôi không tìm thấy thông tin rất cụ thể về việc áp dụng các phương thức này trên ma trận 2d. Ví dụ: tôi đã cố gắng sử dụng filter() từ gói stats.

Tôi cũng nghĩ về kriging, nhưng đây là nhiều hơn về nội suy, phải không?

spectrogram

+0

imageJ rất phù hợp với những điều đó – baptiste

+0

Bạn có thể xem gói 'raster'. –

+0

Ngoài ra, câu hỏi của bạn không cho thấy nhiều nỗ lực nghiên cứu. Bạn chỉ cho chúng tôi những gì bạn đã thử, và bạn chỉ ra những gì bạn không hiểu. Ngay bây giờ bạn đang yêu cầu chúng tôi làm công việc cho bạn, ít nhất đó là cảm giác của nó. –

Trả lời

17

Gói spatstat giữ một chức năng blur() rằng applicates một gaussian blur. Điều này làm mờ hình ảnh theo một cách, mà hầu hết các tiếng ồn biến mất và hai đỉnh chính là rõ ràng rõ ràng.

Hiệu ứng có thể được nhìn thấy trong hình dưới đây và khá đáng chú ý, đặc biệt là trong ô 3D.

effects of blurring

Mã để tạo ra hình ảnh là:

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

Bạn có biết tại sao nó không hoạt động ở đây không? 'rawimg = readJPEG (" church.jpg ") rawimg = t (rawimg) # rawimg = t (mờ (as.im (rawimg), sigma = 6)) rawimg = rawimg [, ncol (rawimg): 1 ] 'Tôi nhận được lỗi này:' Lỗi trong '[.im' (rawimg,, ncol (rawimg): 1): Hoạt động tập hợp con không xác định cho loại chỉ mục này ' –

+0

Nếu bạn không có màu đen và trắng hình ảnh của bạn sẽ là danh sách ba ma trận, mỗi hình ảnh cho một kênh rgb (đỏ, lục và lam). Do đó bạn không thể sử dụng lệnh t(). – nnn

11

Tôi nghĩ bạn nên có một cái nhìn tại các focal chức năng trong gói raster. Ví dụ: (được sao chép từ tài liệu 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)) 

Tài liệu này bao gồm thêm chi tiết.

+0

Ok, điều này cũng sẽ làm điều đó. Điều này có nghĩa là chạy như ý tưởng đầu tiên của tôi là. Nhưng Gauss blur cho kết quả tốt hơn. Nhưng cảm ơn cho câu trả lời anyway. – nnn

+0

công trình này hoàn hảo cho tôi! :) – maycca

7

Bạn chắc chắn muốn xem gói EBImage. Có nhiều chức năng để làm mịn hình ảnh của bạn.

Ví dụ, một bộ lọc trung bình:

# 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

hoặc bạn có thể thử một gaussian blur:

# Apply a gaussian blur with sigma=4 
im.gaus = gblur(im, sigma=4) 
# Display image 
display(im.gaus) 

enter image description here

Hope this helps!

+1

Điều này cũng sẽ làm điều đó, giống như Gauss blur trong gói 'spatstat' hoặc giá trị trung bình đang chạy trong gói' raster'. Tôi thích ánh sáng Gauss tốt hơn, bởi vì bộ lọc trung bình tạo ra các loại sọc dọc và ngang. Cảm ơn câu trả lời. Điều cần biết là có nhiều cách để đạt được những gì tôi đã tìm kiếm! – nnn

+0

@ by0 Tôi nên làm gì nếu tôi nhận được lỗi này? '> install.packages (" EBImage ") Cảnh báo trong install.packages: gói 'EBImage' không khả dụng (đối với phiên bản R 3.0.2)' –

+1

Bạn đang cố gắng cài đặt «EBImage' từ CRAN? Không 'install.packages ('EBImage')', thay vào đó hãy cài đặt nó từ Bioconductor như nguồn này ("http://bioconductor.org/biocLite.R"); biocLite ("EBImage") ' – by0

Các vấn đề liên quan