徐文文,王文青,柴旭超,朱飛鴻
(中國地震局第二監(jiān)測中心,西安 710054)
20世紀(jì)50年代,為了迅速發(fā)展中國的地震科學(xué)事業(yè),國家開始建設(shè)地震觀測系統(tǒng)[1]。經(jīng)過了多年的努力,國家建成了全國基本地震臺(tái)網(wǎng)和區(qū)域地震臺(tái)網(wǎng),各個(gè)觀測臺(tái)站上有很多觀測儀器[2],隨之產(chǎn)生了很多觀測圖紙[3]。因?yàn)橛^測儀器各異,產(chǎn)生的圖紙規(guī)格也比較多,尺寸大小不一:小到幾個(gè)小時(shí)記錄一張,大到1個(gè)月記錄一張。其中由石英伸縮儀和浮子水管儀所產(chǎn)生的圖紙就是一個(gè)月記錄一張。經(jīng)過調(diào)研,這些圖紙大都產(chǎn)生于二三十年前,紙張又比較薄,由于各種歷史和現(xiàn)實(shí)原因,圖紙的保存環(huán)境又不太好,目前圖紙顏色已泛黃,圖紙的邊角有不同程度的破損。這些寶貴的圖紙資料瀕臨破損,亟需搶救。于是模擬地震資料搶救項(xiàng)目組的任務(wù)是把紙質(zhì)的地震歷史資料以某種標(biāo)準(zhǔn)進(jìn)行掃描,以圖片的形式把圖紙永久保存[4]。該類型的圖紙規(guī)格是長×寬:23.16 m×0.267 m。在本研究中,我們約定長度超過20 m的紙質(zhì)圖紙為超大圖紙。我們把超大圖紙的長定義為Loriginal,寬是Woriginal,單位為m,基于上述表述可得到表達(dá)式(1)和(2):
模擬地震資料搶救項(xiàng)目組開展工作本著對(duì)紙質(zhì)圖紙進(jìn)行搶救保護(hù)的原則,掃描的原則是不能對(duì)紙質(zhì)圖紙進(jìn)行破壞,不能因?yàn)閳D紙?zhí)L對(duì)圖紙裁剪破壞,掃描的圖片應(yīng)該清晰分辨率高,所以規(guī)定這些紙質(zhì)圖紙的掃描要求是PNG24位,600 DPI的PNG圖片,這個(gè)可以參考《模擬地球物理圖紙掃描技術(shù)規(guī)程2020(磁照?qǐng)D)》[5]上面的技術(shù)要求實(shí)施的。根據(jù)這個(gè)要求,掃描一張超大圖紙所需內(nèi)存是10 GB左右。在本研究中我們定義:超大圖紙按照600 DPI,24位的掃描要求得到的PNG圖片為超大圖片?,F(xiàn)在市面上存在的圖片閱讀器和編輯器都打不開超大圖片?,F(xiàn)在存在一個(gè)問題:科研人員可能不方便借閱紙質(zhì)圖紙,想通過圖片研究波形信息,但是超大圖片無法用現(xiàn)有的圖片閱讀器或者編輯器打開。于是在本研究中,我們把每月一張的超大圖片切分成以天為單位的正常大小的圖片。在此定義切分得到的以天為單位的正常大小的圖片為小圖。小圖是可以用市面上現(xiàn)有的圖片閱讀器和編輯器打開。并且小圖的規(guī)格仍舊是PNG24位,600 DPI,內(nèi)存300 MB左右。
由于原圖太長,紙質(zhì)圖紙是卷起來存放的,如圖1和圖2(a)所示。打開圖紙可以看到圖紙的兩端各蓋有一模一樣的圖章,一個(gè)圖章在下紙時(shí)間空白處的正面,如圖1所示。備注信息在正面圖章處。另一個(gè)圖章在上紙時(shí)間的背面,如圖2(b)所示。
圖1 形變圖-石英伸縮儀
圖2 石英伸縮儀
如圖3所示,紙質(zhì)圖紙上面是網(wǎng)格,1小格可以記錄20分鐘的波形,如圖3中紅色矩形框所示,1大格由6小格組成,圖3中的標(biāo)號(hào)1—6小格組成了1大格,如圖3中綠色矩形框所示。
圖3 石英伸縮儀局部圖
經(jīng)過測量,1小格的長度是1 cm,那么1大格(6 cm)可以記錄2小時(shí)波形信號(hào),可以得到如表達(dá)式(3)、(4)所示:
其中,L20min為記錄20分鐘波形信息的一小格的長度;L2h為記錄2小時(shí)波形信息的1大格(6小格)所需紙質(zhì)圖紙的長度。
綜上可知,一天24小時(shí)的波形信號(hào)可以用72 cm長的紙記錄完整,如表達(dá)式(5)所示:
其中,L24h為記錄24小時(shí)(1天)波形信息所需紙質(zhì)圖紙的長度。定義Lmonth為記錄1個(gè)月波形信息所需紙質(zhì)圖紙的長度,Nday為這個(gè)月(某一年的1月—12月中的一個(gè)月)的天數(shù),一般的,Nday可以取的值為28,29,30,31。在本研究中,我們假設(shè)Nday=31(其他天數(shù)同理可得),如表達(dá)式(6)所示:
定義Lmargin為超長圖紙上紙和下紙?zhí)幙瞻滋師o波形信息的長度,有如下表達(dá)式(7)所示:
從表達(dá)式(7)可以推出Nday取值為30天,29天,28天的情況下,Lmargin值就更大了。即使Lmargin值有四種可能情況,但是經(jīng)過對(duì)圖紙的調(diào)研,發(fā)現(xiàn)一般圖紙會(huì)在上紙時(shí)間處留下大約12大格(0.72 m)的固定長度,我們定義上紙?zhí)幍牧舭组L度為Lmargin_head;定義下紙?zhí)幍牧舭组L度為Lmargin_tail,可得如下表達(dá)式(8)和(9)所示:
前面提到過,現(xiàn)有的圖片閱讀器和圖片編輯器無法打開超大圖片。用LIBPNG庫函數(shù)在WINDOWS10系統(tǒng)中也不能讀取超大圖片的信息,原因是WINDOWS系統(tǒng)內(nèi)存調(diào)用機(jī)制使得內(nèi)存不足。經(jīng)過嘗試,在LINUX系統(tǒng)下調(diào)用LIBPNG庫函數(shù)對(duì)超大圖片進(jìn)行解析可以得到其相關(guān)頭信息為:該超大圖片為紅綠藍(lán)(RGB)三通道記錄,即每一個(gè)像素存儲(chǔ)的是RGB三個(gè)顏色的16進(jìn)制數(shù)。定義超大圖片寬度的測量值為Worig_mesure,高度的測量值為Horig_mesure,通過C++代碼調(diào)用LIBPNG庫函數(shù)可得到如下表達(dá)式(10)和(11)所示:
該超大圖紙的寬(0.267 m)是正常寬度,因此對(duì)應(yīng)的超大圖片不需要豎著切圖;超大圖紙長度(23.16 m)過長,所以對(duì)應(yīng)的超大圖片需要橫著切,以天為單位,一天切一份。所以下面僅研究超大圖紙的長度方向上和超大圖片的高度方向上的等價(jià)關(guān)系。
經(jīng)過測量和分析,得出長度為1 cm(即1小格)的圖紙等價(jià)為圖片的高度為236行,于是可得如下表達(dá)式(12)所示:
其中,H20min為圖紙記錄20分鐘等價(jià)的圖片高度。經(jīng)簡單推導(dǎo)可以得到如下表達(dá)式(13)—(17)所示:
其中:H2h為圖紙記錄2小時(shí)等價(jià)的圖片高度;H24h為圖紙記錄24小時(shí)等價(jià)的圖片高度;Hmargin_head為理論的上紙留白,Horig_theory為超大圖片高度的理論值;Hdelt為超大圖片的理論值和測量值之間的差值。定義Ldelt為超大圖紙的實(shí)際測量值和理論計(jì)算值之間的誤差。Ldelt的值如下表達(dá)式(18)所示:
從上述表達(dá)式可知,超大圖紙的實(shí)際測量值和理論計(jì)算值之間的誤差為0.27 cm,這樣的誤差是可以接受的,其合理性如下:每張圖紙頭和尾是個(gè)三角形或者梯形,卷在木管子里,難免有摩擦和破損,更何況,這個(gè)圖紙是幾十多年前產(chǎn)生的圖紙,歷史較長,難免在邊角上有破損,還有手動(dòng)測量得到的23.16 m長的圖紙可以有0.27 cm(0.0027 m)的誤差。綜上所述,超大圖紙的實(shí)際測量值和理論計(jì)算值是等價(jià)的,我們就隨機(jī)選一個(gè),以LIBPNG庫函數(shù)讀出來的測量值為準(zhǔn)。
綜上所述,我們得到了超大圖片的參數(shù)和高度換算關(guān)系,接下來我們對(duì)圖片進(jìn)行切分,定義Nsmall_pic為超大圖片切分成小圖的份數(shù),定義nsmall_pic為第n張小圖,那么nsmall_pic∈{1,2,3,Nsmall_pic},我們有如下表達(dá)式(19)和(20)所示:
需求一:當(dāng)nsmall_pic=1時(shí),即第一張小圖的高度由Hmargin_head決定。當(dāng)2≤nsmall_pic≤Nsmall_pic-1時(shí),即第2張到第Nsmall_pic-1張小圖的高度由H24h來決定。當(dāng)nsmall_pic=Nsmall_pic時(shí),即最后一張小圖的高度由Hmargin_tail決定。需求二:考慮到紙質(zhì)圖紙人工標(biāo)注時(shí)間可能有兩個(gè)小時(shí)左右的誤差和上紙時(shí)間也有1~2個(gè)小時(shí)的誤差,我們做了如下規(guī)定:當(dāng)nsmall_pic=1時(shí),允許第一張小圖尾部與第二張小圖的頭部有重復(fù),當(dāng)2≤nsmall_pic≤Nsmall_pic-1時(shí),允許這些小圖的頭與上張小圖的尾有重復(fù),每張小圖的尾跟下張小圖的頭有重復(fù);當(dāng)nsmall_pic=Nsmall_pic時(shí),最后一張小圖只有頭部與倒數(shù)第二張小圖的尾部有重復(fù)。定義Hhead_repeat為第nsmall_pic張小圖(2≤nsmall_pic≤Nsmall_pic)與上張小圖尾部的重復(fù)高度,定義Htail_repeat為第nsmall_pic張小圖(1≤nsmall_pic≤Nsmall_pic-1)與下張小圖頭部的重復(fù)高度。為簡單起見,我們假定Hhead_repeat和Htail_repeat的高度為圖紙記錄2小時(shí)等價(jià)的圖片高度,那么有如下表達(dá)式(21)所示:
需求三:超大圖片上只有下紙?zhí)幱袌D章信息,如果切分成小圖的話,需要把該圖章信息加在小圖的前面以方便研究人員快速獲取小圖信息,又因?yàn)槊糠菪D的圖章信息是后來添加的,為了區(qū)分,在圖章信息和本身切出來的小圖之間加上灰色的分割線。通過研究圖章的尺寸,發(fā)現(xiàn)超大圖紙的圖章和備注信息在一起,長度不超過12 cm。那么,我們定義圖章信息的高度為Hseal,基于之前的換算關(guān)系,我們有如下表達(dá)式(22)所示:
假設(shè)灰色的分割線高度為Hdivider,我們有如下表達(dá)式(23)所示:
綜上所述,我們把所有的需求都滿足了,接下來我們重新定義一下小圖的高度,小圖的高度定義為Hsmall_png。分為3種情況,下面分別來討論,如表達(dá)式(24)—(26)所示:
情況1:當(dāng)nsmall_pic=1時(shí),
情況2:當(dāng)2≤nsmall_pic≤Nsmall_pic-1時(shí),
情況3:當(dāng)nsmall_pic=Nsmall_pic時(shí),
由于超大圖片不能豎著切,因此小圖的寬度即是超大圖片的寬度,定義為Wsmall_png,我們有如下表達(dá)式(27)所示:
綜上所述,我們把每張小圖的高度Hsmall_png和寬度Wsmall_png都確定了,接下來進(jìn)行展示切圖成果。
實(shí)現(xiàn)上述切圖方案,開發(fā)工具為LINUX系統(tǒng)和LIBPNG庫函數(shù)版本為libpng-1.6.37和zlib-1.2.11,配置好環(huán)境后使用,編程語言用C++。本次切圖超大圖紙來源于張家口臺(tái)1988年4月1日到5月1日的浮子水管儀,該紙質(zhì)圖紙長×寬為23.16 m×0.267 m,我們可以看到其圖章信息如圖4所示,把該紙質(zhì)圖紙掃描成600 DPI,24位的PNG圖片的超大圖片的規(guī)格屬性如圖5所示,由于其占用空間9.94 GB,用目前所能得到的看圖軟件都打不開,圖6是把該超大圖紙通過上述切圖算法用C++在Linux系統(tǒng)下切分成32份小圖,由前述分析可知,32份小圖的個(gè)數(shù)是合理的。圖7(a)為圖6中的第1幅圖,圖7(b)為圖6中的第2幅圖,圖7(c)為圖6中的第32幅圖,這3幅圖的長度不一樣,即高度不一樣,第2幅到第31幅圖的規(guī)格是一樣的。故選擇這3幅就可以代表切圖生成的所有小圖的類型了。由于石英伸縮儀和浮子水管儀的規(guī)格是一樣的,該程序也適用于石英伸縮儀超大圖紙的切分。再者,如果是其他的圖紙寬度正常,不需要切分,長度比較長,都可以進(jìn)行圖紙的切分,只需要把切分的高度參數(shù)調(diào)整一下,思路是一樣的,所以說,只要是要求橫著切圖,本研究都可以適用。
圖4 圖紙正面圖章信息
圖5 原始掃描件的屬性
圖6 原始圖片切割成的小圖集
圖7 三種規(guī)格的小圖
本文為模擬地震資料搶救過程中搶救出的超大圖片提供了一種圖片切分方法,通過這種圖片切分,解決了搶救圖紙打不開的問題,科研人員可以使用電腦自帶的或者市面上已有的圖片閱讀器或者圖片編輯器打開切割好的小圖進(jìn)行研究。