日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python读取文件夹下所有图像 预处理_Tensorflow之tif图像文件预处理

發(fā)布時(shí)間:2024/1/23 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python读取文件夹下所有图像 预处理_Tensorflow之tif图像文件预处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫在前面

許久沒有登錄我的簡書了,或許忙只是給自己的借口,內(nèi)心浮躁,不愿坐下來靜下心寫點(diǎn)東西才是真正的原因。寫作是個(gè)該堅(jiān)持的好習(xí)慣,一方面能記錄下一些當(dāng)時(shí)的心情想法,一方面也是在鍛煉自己的表達(dá)能力。善于抒發(fā),會(huì)懂得表達(dá)在如今其實(shí)對(duì)個(gè)人而言是個(gè)很大的加分項(xiàng)。或者說, 起碼是我希望自己能夠提升的一種能力。

目前我正處于碩士生涯的畢業(yè)設(shè)計(jì)階段,也正在籌備即將來臨的求職季。這個(gè)文集也是我在目前這個(gè)階段的記錄總結(jié)。如果你恰好碰到和我一樣或者類似的問題,希望能對(duì)你有所幫助。

問題描述

我做的項(xiàng)目與深度學(xué)習(xí)相關(guān),我選用了Tensorflow作為主要的工具。對(duì)于圖像文件,為了便于移動(dòng)以及讀取為tf.data.Dataset使用,我想做的預(yù)處理便是將圖像先轉(zhuǎn)存為TFRecord文件,之后再通過讀取TFRecord得到tf.data.Dataset。

這樣選擇的理由就不在此詳細(xì)展開,可參考以下幾篇文章:

由于Tensorflow目前僅有對(duì)bmp,gif,jpeg以及png四種圖片的類型的decode方法,對(duì)于tif格式的圖片文件并不支持,我在寫完運(yùn)行良好的預(yù)處理的代碼后,不得不又為此修改了一番。接下來我分別描述修改前后的過程,并點(diǎn)出我需要如何改動(dòng)才能使tif格式的圖片也能被良好地預(yù)處理。

Figure 1 ref:https://www.tensorflow.org/api_docs/python/tf/io/decode_image

預(yù)處理1.0版

Pipeline 1.0

起初,我在使用的數(shù)據(jù)集皆為png格式的圖片,Tensorflow包含了相應(yīng)的decode方法。于是,在tf.read_file和tf.image.decode_png的啟發(fā)下,我選用了如上圖所述的預(yù)處理方式:首先將所有的圖像文件讀取為一個(gè)tf.data.Dataset,再存為TFRecord文件。在最終需要訓(xùn)練時(shí)再重新將TFRecord文件讀取成當(dāng)初的tf.data.Dataset。這個(gè)方法對(duì)我所使用的png圖片數(shù)據(jù)而言運(yùn)行良好。在完成并調(diào)試這部分代碼的同時(shí),我也通過對(duì)其中數(shù)次的格式轉(zhuǎn)換的學(xué)習(xí),加深了對(duì)Tensorflow這部分代碼的理解。

[ToThink: 是否需要將其中的細(xì)節(jié)展開敘述呢?]

碰到問題后的反思

一切順風(fēng)順?biāo)?#xff0c;在成功得到了一些測試結(jié)果后,我找到了第二個(gè)數(shù)據(jù)集,來進(jìn)一步檢驗(yàn)所使用的方法。不幸的事情發(fā)生了,第二個(gè)數(shù)據(jù)集為tif格式的圖片,先前寫好的預(yù)處理方法會(huì)報(bào)錯(cuò)。進(jìn)行簡單的檢索后我發(fā)現(xiàn),已有很多人被同樣的問題困擾,在17年時(shí)便有人在Tensorflow的Github上提出了這一點(diǎn)。但直至現(xiàn)在,還沒有人為此做出貢獻(xiàn)。

ref:https://github.com/tensorflow/tensorflow/issues/12997

既然原有的方式不能對(duì)tif圖片進(jìn)行預(yù)處理,不破不立,我只能推倒重來,嘗試用其他的方式在完成這一功能。于是我更仔細(xì)地查找資料,閱讀源碼和自己寫的代碼,看看能不能找到一個(gè)突破口。

首先,我思考的問題是png圖片與tif圖片究竟有什么不同。png與tif是兩種不同的圖片格式,具體的區(qū)別可以查看以下的這篇文章。

What's the Difference Between PNG, JPEG, GIF, and TIFF?

其中關(guān)鍵的區(qū)別是,tif圖片并不一定是三通道的圖片文件,很可能含有更多的通道。但png,jpeg,bmp等格式的圖片,都是單通道(灰度圖片)或者三通道(RGB)的圖片文件。簡單來說,tif圖片的通道數(shù)的可能很多,并且不同通道中的數(shù)值代表的意義也有很大的不同,不僅僅是顏色數(shù)值這么簡單。或許這就是為何tif圖片的decode遲遲沒人完成的原因吧。

幸運(yùn)的是,我所要使用的這個(gè)數(shù)據(jù)集的所有tif圖片,都是三通道(RGB)的。從圖片數(shù)據(jù)角度而言,前后兩個(gè)數(shù)據(jù)集沒有任何區(qū)別。于是我返回去查看預(yù)處理1.0的代碼,重點(diǎn)放在了數(shù)據(jù)格式的轉(zhuǎn)換上。有了如下的發(fā)現(xiàn):

經(jīng)tf.read_file函數(shù)讀取后的返回的類型為A Tensor of type string,是一個(gè)Tensor。而如圖一所示,Tensorflow中decode_img進(jìn)行的處理是“ performs the appropriate operation to convert the input bytes string into a Tensor of type dtype.” ,返回類型依然是一個(gè)Tensor。但最終轉(zhuǎn)存為TFRecord文件中的確實(shí)是轉(zhuǎn)化成字符串的圖片文件。

#代碼片段

#tf.data.Dataset -> TFRecord

img_data = img.tobytes()

mask_data = mask.tobytes()

#print(type(img_data))

example=tf.train.Example(features=tf.train.Features(

feature={

'shape': tf.train.Feature(int64_list =

tf.train.Int64List(value=[img.size[0],

img.size[1],len(img.getbands())])),

'img_data':tf.train.Feature(bytes_list =

tf.train.BytesList(value=[img_data])),

'mask_data':tf.train.Feature(bytes_list =

tf.train.BytesList(value=[mask_data]))

}))

既然最終需要的是轉(zhuǎn)化為字符串的圖片文件,那么中間變成Tensor的幾步操作,是可以用其他方式替代的。圖片本質(zhì)而言就是矩陣,對(duì)于所有的三通道RGB圖片,可將他們直接轉(zhuǎn)化為矩陣先進(jìn)行一系列預(yù)處理操作(如改變大小,旋轉(zhuǎn),調(diào)色),之后再轉(zhuǎn)存為TFRecord文件就可以了。我先前的一個(gè)觀念是,只有將tf.data.Dataset變成TFRecord,才能再后面從TFRecord變成TFRecordtf.data.Dataset。但在測試后發(fā)現(xiàn),只要有了TFRecord,就能輕易的讀取為tf.data.Dataset,不管TFRecord是如何得到的。

預(yù)處理2.0版

經(jīng)過修改,2.0版本的預(yù)處理方式便實(shí)現(xiàn)出來了。代碼鏈接

Pipeline 2.0

在讀取圖片時(shí),我選用的庫為Pillow,主要原因?yàn)槠渥x取tif圖片的表現(xiàn)較好。但可能會(huì)碰到如下的報(bào)錯(cuò)信息:

Hide "TIFFSetField: tempfile.tif: Unknown pseudo-tag 65538."

總結(jié)

本文總結(jié)并介紹了在Tensorflow下預(yù)處理tif圖像的一種方式。在至今Tensorflow仍沒給出tif的decode函數(shù)的情況下,我們可以選用先直接將圖像轉(zhuǎn)化成矩陣,經(jīng)預(yù)處理后再轉(zhuǎn)存為TFRecord的方式進(jìn)行預(yù)處理。

從這個(gè)過程中,我不得不深入的去思考整個(gè)格式轉(zhuǎn)換的的過程。在我看來,最重要的一點(diǎn),便是看清楚最終轉(zhuǎn)換的目標(biāo)結(jié)果,通過結(jié)果再思考選用的方式和流程。

總結(jié)

以上是生活随笔為你收集整理的python读取文件夹下所有图像 预处理_Tensorflow之tif图像文件预处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。