2015-01-20 14 views
11

Tôi đang sử dụng chức năng raster như được hiển thị trên các dòng bên dưới. Dòng cuối cùng của tôi tạo ra một số đầu ra. Đầu ra đó có một dòng ghi là dimensions : 240, 320, 76800 (nrow, ncol, ncell). Tôi muốn in lại hình ảnh đó nhưng chỉ nói 200 hàng đầu tiên và 300 cột đầu tiên. Làm thế nào tôi có thể làm điều đó? Dòng cuối cùng thứ hai dưới đây âm mưu toàn bộ hình ảnhgói raster hình ảnh R - in raster không có nền và đường viền và chú thích

f <- "pictures/image1-1421787394.jpeg" 
f 
r <- raster(f) 
plot(r); 
r 

============================= Update1

Tôi đã làm png(filename = '~/x.png');par(mar=rep(0, 4), xpd = TRUE, oma=rep(0, 4),bty='n') ; plot(r,xlim=c(0,200),ylim=c(0,200),legend=FALSE,axes=FALSE); dev.off() để lưu hình ảnh đã cắt. Tôi đã có thể loại bỏ huyền thoại và rìu và hộp đen. Nhưng vấn đề là hình ảnh đã lưu chứa nhiều hơn phần cắt - ví dụ như phần màu trắng xung quanh hình ảnh. Tôi chỉ muốn lưu phần cắt của ảnh gốc (giữ kích thước hình ảnh 200 * 200 pixel). Xin vui lòng cho tôi biết làm thế nào để làm điều đó?

Hơn nữa, làm cách nào tôi có thể thêm hình vuông màu đỏ tương ứng với phần được cắt ở trên vào hình ảnh gốc? Tôi có nghĩa là tôi muốn có một hình vuông màu đỏ (chỉ cạnh) trên đầu của hình ảnh gốc và sau đó lưu hình ảnh này (hình ảnh gốc + hình vuông) làm hình ảnh mới.

Tôi có thể làm điều đó bằng cách nào?

Update2 ++++++++++++++++++++++++++++++++++++++++++++++++

thêm ví dụ lặp lại để hiển thị những gì tôi có nghĩa là bởi nền trắng

dòng cuối cùng bên dưới lô cắt hình ảnh. Tôi muốn hình ảnh đó là 100 * 100 vì xlim và ylim của tôi là 100. Nhưng tôi thấy một nền trắng như trong ví dụ dưới đây. (Bạn không thể nhìn thấy nền Nhưng nếu bạn chạy mã trên máy tính của bạn và mở hình ảnh, bạn sẽ thấy nó.)

library(raster) 
r <- raster(nrow=240, ncol=320) 
values(r) <- 1:ncell(r) 
plot(r) 
plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F) 

enter image description here

Trả lời

5

Bạn có thể làm điều đó bằng cách thiết lập xlimylim:

plot(r,xlim=c(0,299),ylim=c(0,199)) 

[CẬP NHẬT] Để thoát khỏi nền trắng, bạn có thể thử useRaster=F tham số:

plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F,useRaster=F) 
+0

có cách nào để lưu hình ảnh mới (bị cắt) không? – user2543622

+0

Chắc chắn - làm 'png (tên tệp = '~/x.png'); cốt truyện (r, xlim = c (0,200), ylim = c (0,200)); dev.off() '. Bạn cũng có thể các lệnh khác như 'pdf()' hoặc 'jpeg()' để tạo ra hình ảnh ở các định dạng khác nhau. –

+0

một câu hỏi nữa: tôi đang lập kế hoạch để nhận các giá trị bằng hàm getValues ​​(). getValues ​​(r) hoạt động tốt. Nhưng tôi muốn nhận được giá trị chỉ cho hình ảnh bị cắt. Làm thế nào tôi có thể sử dụng chức năng getValues ​​trong conjuction với các thông số xlim và ylim? – user2543622

4

Nếu hiểu rõ câu hỏi của bạn, bạn có RasterLayer r với độ mờ (c), 240 và 320, sau đó vẽ mà không có khoảng trắng.

Luôn cung cấp dữ liệu mẫu. Trong trường hợp này dễ thực hiện.

library(raster) 
r <- raster(nrow=240, ncol=320) 
values(r) <- 1:ncell(r) 

Có nhiều cách khác nhau để cắt theo hàng/cột. Ví dụ bạn có thể tạo một đối tượng mức độ và sử dụng nó.

e <- extent(r, 1, 200, 1, 300) 
rc <- crop(r, e) 

Một cách khác (ví rasters kích thước nhỏ hơn) sẽ được sử dụng chỉ mục và thả = FALSE

rc <- r[1:200, 1:300, drop=FALSE] 

Để thực hiện một bản đồ mà bạn có thể sử dụng 'âm mưu' hoặc 'image'.Có lẽ hình ảnh phù hợp với bạn hơn (không gian màu trắng ít hơn, nhưng không có truyền thuyết)

image(rc) 

với cốt truyện bạn có thể đặt kích thước của thiết bị trước khi vẽ đồ thị.

dev.new(height=nrow(r), width=ncol(r)) 
plot(rc, legend=FALSE) 

Bạn cũng có thể vẽ một tệp như png để tránh khoảng trắng; tùy thuộc vào cách bạn thiết lập 'par'ameters của bạn như mai

png('test.png', width=450, height=275) 
plot(rc) 
dev.off() 

Các cách khác để đối phó với điều này bao gồm sử dụng spplot, hoặc levelplot trong gói rasterVis

spplot(rc) 
library(rasterVis) 
levelplot(rc) 

Để có được hình chữ nhật màu đỏ trên hình ảnh gốc

plot(r) 
plot(e, add=TRUE, col='red', lwd=2) 
+0

Khi tôi đang sử dụng lệnh png thông số nào tôi nên đặt để tránh bất kỳ nền nào? trong ví dụ cắt ảnh của bạn sẽ là 200 * 300 (theo lệnh mức độ) thì trong lệnh png tại sao bạn có width = 450, height = 275? – user2543622

+0

cũng khi tôi vẽ hình ảnh gốc góc dưới cùng bên trái của tôi là 0,0. Nhưng khi tôi vẽ mở rộng tại sao nó xuất hiện như một thanh ngang ở phần trên cùng của hình ảnh? không phải là thanh dọc nằm ở vị trí ngoài cùng bên trái của hình ảnh? – user2543622

+0

Tôi không biết ý bạn là gì "tránh bất kỳ nền nào". Tôi thay đổi chiều rộng/chiều cao để phù hợp với chú giải. Tôi không biết những gì bạn có ý nghĩa của thanh ngang và dọc (tôi không thấy một trong hai). – RobertH

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