2013-01-03 30 views
10

Tôi hiện đang làm việc trên một ứng dụng của Principal Component Analysis để dữ liệu hình ảnh trong R.Làm thế nào để sử dụng R để xử lý hình ảnh cơ bản

Trong Matlab, người ta có thể gọi lệnh như "im2double" và "mat2gray" để chuyển đổi một bitmap vào một ma trận số và quay lại một hình ảnh.

Tôi đã tự hỏi liệu điều này có thể đạt được trong R, có thể thông qua các gói bổ sung.

+1

Tắt chủ đề Tôi nghĩ không phải là câu hỏi thống kê. Có lẽ tốt hơn cho R-giúp đỡ hơn ở đây. Nhưng có những gói như bmp, readbitmap, pixmap, và raster có thể làm những gì bạn muốn - tùy thuộc vào chính xác những gì đó là (tôi không hoàn toàn thấy liên kết đến các thành phần chính). –

+0

Lệnh 'image' sẽ cho phép bạn hiển thị hình ảnh lập chỉ mục hoặc thang độ xám đơn giản, ví dụ: 'hình ảnh (1: 100,1: 100, (1: 100)% *% t (1: 100)/100, col = rgb (1: 100/100,1: 100/100,1: 100/100)) ', nhưng gói EBImage mà @MattBagg nói về bên dưới có vẻ vượt trội hơn rất nhiều. Theo như tôi biết, cơ sở R không có hỗ trợ tải hình ảnh, vì vậy bạn sẽ phải tiền xử lý với netpbm hoặc tương tự. – user295691

+0

Có hai gói có sẵn để xử lý hình ảnh: EBImage và adimpro. – marbel

Trả lời

7

Tôi đã sử dụng các gói EBImage (vignette đây) có sẵn trên bioconductor để làm việc với và thao tác hình ảnh:

# installing package if needed 
source("http://bioconductor.org/biocLite.R") 
biocLite("EBImage") 

library(EBImage) 
f = readImage(system.file("images", "lena-color.png", package="EBImage")) 
str(f) 
#Formal class 'Image' [package "EBImage"] with 2 slots 
# [email protected] .Data : num [1:512, 1:512, 1:3] 0.886 0.886 0.875 0.875 0.886 ... 
# [email protected] colormode: int 2 
2

Tôi đã đủ tò mò muốn thử loại này ra; rõ ràng một gói là một giải pháp tốt hơn, nhưng nếu bạn thực sự muốn dính vào cơ sở R, điều này sẽ tải một png (mặc dù lộn ngược và ngược, đó có thể là fixable). Nó giả định sự hiện diện của các công cụ netpbm, vì vậy có lẽ sẽ không làm việc ra khỏi hộp trên các hệ thống Windows.

readPng <- function(pngFile) { 
    contents <- system(paste('pngtopnm',pngFile,'| pnmtoplainpnm'),intern=TRUE) 
    imgDims <- strsplit(contents[2], ' ') 
    width <- as.numeric(imgDims[[1]][1]) 
    height <- as.numeric(imgDims[[1]][2]) 
    rawimg <- scan(textConnection(contents),skip=3) 
    return(list(
    x=1:width, 
    y=1:height, 
    z=matrix(rawimg,width), 
    width=width, 
    height=height)) 
} 

Bạn có thể chạy trực tiếp image(img) trên danh sách trực tiếp hoặc truy cập giá trị mỗi pixel bằng img $ z.

1

Gói tương đối mới tiff sẽ đọc và ghi hình ảnh TIF khá độc đáo.
Giống nhau, đối với bất kỳ thao tác nào khác ngoài thao tác hình ảnh tương đối đơn giản, tôi khuyên bạn nên sử dụng ImageJ hoặc SAOImage9 từ nhóm Harvard-Smithsonian: http://www.cfa.harvard.edu/resources/software.html.

Tôi đã viết các công cụ trong R để thực hiện hợp nhất pixel, chia tách pixel, Sobel & Biến đổi thô, đổi màu, v.v., với thành công lớn. Cuối cùng, lựa chọn ứng dụng phụ thuộc vào kích thước hình ảnh của bạn và loại xử lý bạn cần làm.

+0

Tại sao không chia sẻ một số công cụ của bạn? – by0

+0

@ by0 thật đáng buồn, có một sự khác biệt lớn giữa một số hacks nhanh có được công việc làm và một chức năng mạnh mẽ, xác thực đầu vào thích hợp, và đặc biệt cho xử lý hình ảnh, là hợp lý nhanh chóng. Không có công cụ hình ảnh nào của tôi đáp ứng được các tiêu chuẩn như vậy. –

1

Hai phương pháp để cài đặt gói.

  1. cài đặt thông qua dòng lệnh nếu bạn không có biên tập viên như RStudio
  2. cài đặt dòng lệnh bằng cách nhập vào thông dịch viên R sử dụng lệnh R trong bash.

Đi tới nơi bạn có thể thực thi lệnh R. đây là những lệnh xử lý ảnh cơ bản.

thực hiện lệnh này để cài đặt các backage Bio dẫn biocLite, mà sẽ giúp đỡ để cài đặt gói EBIMage (gói này được sử dụng rộng rãi cho xử lý ảnh)

source("http://bioconductor.org/biocLite.R") 

cài đặt gói EMImage sử dụng các lệnh xử lý hình ảnh.

biocLite("EBImage") 

tải gói EBIMage sử dụng xử lý hình ảnh

library("EBImage") 
# Reading image from computer 
img=readImage(files="~/Desktop/Prog/R/tinago.JPG") 
display(img) 
img1=img+ 0.2 # increase brightness 
img2=img- 0.2 # decrease brightness 
display(img1) # Display images in browser or graphical window 
display(img2) # Display images in browser or graphical window 
img3= img * 0.5 # decrease contrast 
img4=img * 2 # increase contrast 
display(img3); display(img4) # show result images 
img5=img^2 # increase Gamma correction 
img6=img^0.7 # decrease Gamma correction 
display(img5); display(img6) # Display result images 

Lưu ý: readImage để đọc các hình ảnh. Hiển thị được sử dụng để xem hình ảnh trong cửa sổ đồ họa.

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