2017-06-03 33 views
2

有誰知道可以用來旋轉非常大的圖像的Python庫嗎?我需要確保圖像使用相同的顏色,並且沒有內插,也就是說我必須使用最近的鄰居旋轉。在python中旋轉大圖像(85000x85000x3)

圖像格式爲tiff。我正在使用NVIDIA DGX來處理它,該服務器擁有512 GB的系統內存。

OPENCV

我嘗試使用OpenCV的:

M = cv2.getRotationMatrix2D((w/2,h/2),angle,1) 
im_rgb_rot = cv2.warpAffine(im_rgb,M,(w,h),flags=cv2.INTER_NEAREST) 

而且好像之後旋轉im_rgb_rot變成空白圖像由全零。

SciPy的

而且,我嘗試使用scipy.ndimage.interpolation.rotatescipy.misc.imrotate和一個小的測試圖像上,但它似乎像下面看到的旋轉不給我直邊。我應該注意到,opencv給出了直接的優勢。

enter image description here

這個代碼是:

scipy.ndimage.interpolation.rotate(im_test, 40, reshape=False, mode='nearest') 

PIL

最後,我不能用公益訴訟,因爲它不支持這樣的高畫質圖像。

+0

這是14.5 terrabytes未壓縮。你還沒有接近提供足夠的信息。對於初學者來說,你需要解釋如何存儲這些東西以及你需要做什麼計算資源。 – Gene

+0

對不起,我會用它更新帖子,但這些都是'tiff'圖片。有一系列尺寸和最大尺寸是85000x85000x3,我還沒有與這個尺寸的工作。但由於'tiff'圖像是一個像素3個字節,我相信圖像大約需要50-65GB的數據。我使用的是具有512GB系統內存的NVIDIA DGX。 –

+0

我很抱歉,不知道我的數學課程在哪裏。 22Gb應該可以在這臺機器上運行,但是你一定需要一個完整的64位庫。你看過ImageMagick嗎?他們的文檔有一個關於「大量圖像」的部分http://www.imagemagick.org/Usage/files/#massive。你可以嘗試使用命令行工具,但我相信有一個Python API(我知道Ruby有一個)。這其中的一部分可能會設置您的操作系統,以允許分配這麼大。你沒有提到操作系統。 – Gene

回答

0

libvips可以使用很少的內存快速處理大圖像。我嘗試了65K X 65K像素瓷磚JPG壓縮TIFF圖像的20度旋轉,我的臺式PC(E5-1650 @ 3.20GHz)上:

$ time vips similarity M7_KM-1.tif x.tif --angle 20 --interpolate nearest 
real 2m36.655s 
user 3m20.000s 
sys 0m19.936s 
peak memory: 1.08g 

對於常規的非壓縮帶區TIFF這是一個慢一點,因爲貴賓有圖像解壓縮到一個臨時的磁盤文件第一:

$ time vips similarity x.tif y.tif --angle 20 --interpolate nearest 
real 6m43.461s 
user 2m17.220s 
sys 2m25.960s 
peak memory: 440mb 

你的情況,你有記憶bucketloads,這樣你就可以使用,而不是一個臨時的磁盤文件:

$ export VIPS_DISC_THRESHOLD=100g 
$ time vips similarity x.tif y.tif --angle 20 --interpolate nearest 
real 2m34.049s 
user 3m48.508s 
sys 0m33.136s 
peak memory: 20g 

在蟒蛇你會使用:

import gi 
gi.require_version('Vips', '8.0') 
from gi.repository import Vips 

x = Vips.Image.new_from_file("M7_KM-1.tif") 
x = x.similarity(angle = 20, interpolate = Vips.Interpolate.new("nearest")) 
x.write_to_file("x.tif") 

它通常是6x or 7x faster than PIL or imagemagick並需要更少的內存。有Python,Ruby,Lua,Javascript,PHP,C,C++,Go和其他的綁定。它在linux,Windows和macOS上運行,並且安裝時使用方便的軟件包(或者對於Windows來說不太方便的大型zip)。