2012-04-02 3 views
1

Недавно я загрузил и установил PyLibTIFF с here и пытался прочитать черепичные изображения tiff.Чтение Плиточные изображения с PyLibtiff

Я отлично читаю изображения с разверткой, но не могу найти правильную функцию для чтения фрагментов. Я просматривал весь каталог libtif в папке python site-packages и не нашел никакой команды «read_tile».

Я в основном пытаюсь перекодировать из this example:

TIFF* tif = TIFFOpen("myfile.tif", "r"); 
if (tif) { 
uint32 imageWidth, imageLength; 
uint32 tileWidth, tileLength; 
uint32 x, y; 
tdata_t buf; 

TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imageWidth); 
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageLength); 
TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tileWidth); 
TIFFGetField(tif, TIFFTAG_TILELENGTH, &tileLength); 
buf = _TIFFmalloc(TIFFTileSize(tif)); 
for (y = 0; y < imageLength; y += tileLength) 
    for (x = 0; x < imageWidth; x += tileWidth) 
    TIFFReadTile(tif, buf, x, y, 0); 
_TIFFfree(buf); 
TIFFClose(tif); 

в питон.

До сих пор я получил:

tif = TIFF.open(tif_path, 'r') 

image_width  = tif.GetField("ImageWidth") 
image_length = tif.GetField("ImageLength") 
tile_width  = tif.GetField("TileWidth") 
tile_length  = tif.GetField("TileLength") 

y = 0 
while y < image_length: 

    x = 0 
    while x < image_width: 

     print tif.read_tile(x, y, 0) 

     x += tile_width 

    y += tile_length 

tif.close() 

Я на самом деле просто нужно проверить, если размолвка поврежден или нет. tif.info() не помогает, потому что он просто читает заголовок файла, который отключен даже в коррумпированных tif.

Любая помощь, мысли или идеи были бы высоко оценены! Спасибо!

ответ

0

Из документации на libtiff's project page:

«» «Предупреждение:.. Pylibtiff в настоящее время поддерживает чтение и запись изображения, которые хранятся с использованием TIFF полосы Патчи радушны для поддержки кафельных изображений TIFF» «»

Однако, поскольку это чистый пакет python с использованием ctypes, и вы идентифицировали один вызов, который отсутствует, вполне возможно, что вы можете скопировать и вставить из других оберток функций там, чтобы написать свой вызов TIFFReadTile

+0

Спасибо за ваш ответ, но да, я видел первую строку с цитированием, выполняющую мои первоначальные поиски. Не могли бы вы привести пример того, что вы предложили? – Jared

0

Может быть, я c onfused с tiff номенклатурой, поскольку я привык ссылаться на tiff фильм как tiff стек в отличие от плиточный tiff image. Я могу перебрать свой стек Tiff с iter_images:

tif = TIFF.open('tiffimage.tif') 

for image in tif.iter_images(): 
    *do stuff with image* 

Или выберите одно изображение из фильма с помощью:

l = list(tif.iter_images()) 
plt.matshow(l[100)) 
plt.show() 

Возможно tiffile.py модуля Кристофома Gohlke интересен для вас, а также, как указано на сайте pylibtiff. Но вы можете использовать это уже, поскольку страница, на которую вы ссылаетесь, также поддерживается Gohlke?

+0

Проблема заключается в том, что «iter_images» проходит через слои tiff. Макияж черепичных tiffs совсем другой, так что функция не работает. «Плиточные» tiffs являются результатом «mipmapping» - http://en.wikipedia.org/wiki/Mipmap, который, я думаю, не так распространен, как стандартные слоистые tiff. Спасибо за ответ, хотя. – Jared

Смежные вопросы