鄒秀珍,胡宇宸,朱長青
(1.南京吉印信息科技有限公司,江蘇 南京 210013;2.南京師范大學 虛擬地理環(huán)境教育部重點實驗室,江蘇 南京 210097)
地理信息是國家基礎設施建設與地理信息科學研究的基礎數(shù)據(jù),包含了大量的地理位置信息、空間分布特征和地理屬性,被廣泛應用于城市規(guī)劃、環(huán)境保護、農(nóng)業(yè)管理等領域[1-3]。然而,隨著地理信息的快速增長和廣泛流通,隨之引起的復制、盜版等侵權問題屢禁不止[4-6],不僅無法保障數(shù)據(jù)提供者的權益,還阻礙了更多的數(shù)據(jù)共享和創(chuàng)新,無法推動地理信息領域的持續(xù)發(fā)展。因此,如何解決地理信息開放共享和版權保護之間的矛盾成為了地理信息領域面臨的重要科學問題。
數(shù)字水印是一種將特定信息嵌入到數(shù)字數(shù)據(jù)中的技術,通過對數(shù)據(jù)進行隱蔽性修改,不影響數(shù)據(jù)的正常使用和感知,但可在需要時提取水印信息以實現(xiàn)版權保護[7-8]。數(shù)字水印技術的出現(xiàn)為地理信息的版權保護提供了新思路[9-11],在多年研究中,眾多學者們針對不同格式的地理信息設計了多種數(shù)字水印算法[12-14]?,F(xiàn)有地理信息數(shù)字水印算法可分為空間域和變換域算法兩類。其中,空間域算法直接使用坐標、像素值、亮度值等作為水印信息載體[15];變換域算法將坐標、像素值等從空間域轉換為變換域后,使用轉換后的系數(shù)作為水印信息載體[16]。
基于設計的水印算法,學者們逐漸開發(fā)了地理信息版權保護系統(tǒng)。張海濤等[17]利用數(shù)字水印技術開發(fā)了名為GiSeal的軟件,該軟件以矢量數(shù)據(jù)的空間分布特征為基礎,將水印信息嵌入搭配數(shù)據(jù)的冗余信息中。周芳妃[18]設計了基于離散傅里葉變換的自適應矢量地圖數(shù)字水印算法,基于此開發(fā)了適用于矢量地圖的數(shù)字水印系統(tǒng)。崔翰川等[19]基于ArcGIS Engine 開發(fā)了矢量地理數(shù)據(jù)數(shù)字水印系統(tǒng),實現(xiàn)了對于矢量地理數(shù)據(jù)的版權保護。任娜等[20]開發(fā)了適用于4D 數(shù)據(jù)的數(shù)字水印系統(tǒng),實現(xiàn)了對多種格式地理信息的版權保護。鄧曉紅等[21]介紹了數(shù)字水印在南京市規(guī)劃和自然資源局中,實現(xiàn)數(shù)據(jù)安全保護中的應用。
雖然,上述開發(fā)地理信息數(shù)字水印系統(tǒng)現(xiàn)已在各領域得到了廣泛應用,但只適用于Windows 操作系統(tǒng),不適用基于Linux 內核開發(fā)的國產(chǎn)操作系統(tǒng),因此無法完全滿足科研、政府等機構在多個平臺上實現(xiàn)地理信息版權保護的需求。
相較于Windows 操作系統(tǒng),國產(chǎn)操作系統(tǒng)由本國技術團隊開發(fā),具有自主可控性[22]。其次,國產(chǎn)操作系統(tǒng)可根據(jù)國情、安全需求進行定制開發(fā),以提供更強的安全保護和適應性。在實現(xiàn)GIS 軟件國產(chǎn)化的背景下,雖然開發(fā)代碼及內容逐漸實現(xiàn)了國產(chǎn)化,但開發(fā)平臺的不安全性對GIS 軟件造成了一定的威脅。因此,開發(fā)適用于國產(chǎn)操作系統(tǒng)的GIS 軟件,可提供更好的數(shù)據(jù)安全、定制化功能、本地技術支持,跨部門合作優(yōu)勢更強,有助于滿足國內用戶需求,降低外部技術的依賴。地理信息數(shù)字水印系統(tǒng)作為保護地理信息版權的關鍵軟件,確保其安全性是維護國家地理信息安全的關鍵所在。因此,開發(fā)基于Linux 操作系統(tǒng)的地理信息數(shù)字水印系統(tǒng),真正實現(xiàn)GIS 軟件的自主可控,是當前研究的關鍵問題。
為了解決上述問題,本文使用開源的地理空間數(shù)據(jù)抽象庫(Geospatial Data Abstraction Library,GDAL),開發(fā)了適用于Linux 操作系統(tǒng)的地理信息數(shù)字水印系統(tǒng),實現(xiàn)了地理信息在Linux 操作系統(tǒng)上的版權保護,為地理信息的安全共享和保護提供了新的思路。
地理信息數(shù)字水印系統(tǒng)建設的總體目標是在類型多樣、格式繁多的數(shù)據(jù)中嵌入可代表版權信息的水印,從而實現(xiàn)版權保護。系統(tǒng)要求快速速寫不同類型的地理信息,且具備跨平臺的能力。因此,數(shù)字水印系統(tǒng)基于Linux 操作系統(tǒng),應用開源且跨平臺的GDAL 庫,采用Java 語言、Swing 框架進行開發(fā),系統(tǒng)架構如圖1 所示。由此可見,本文系統(tǒng)以不同數(shù)據(jù)類型的數(shù)字水印算法為基礎,依據(jù)C/S三層架構將其劃分為表示層、業(yè)務邏輯層、數(shù)據(jù)訪問層,不同層級完成不同的業(yè)務需求。
Fig.1 System framework圖1 系統(tǒng)框架
(1)表示層。該層是用戶與系統(tǒng)之間的接口,用戶通過該層與系統(tǒng)進行交互操作,可輸入待處理文件的路徑、水印信息,并選擇嵌入的數(shù)據(jù)格式和方法等,將輸入數(shù)據(jù)傳遞給業(yè)務邏輯層進行處理。
(2)業(yè)務邏輯層。該層實現(xiàn)了地理信息數(shù)字水印系統(tǒng)的應用功能,具體為版權信息加密方法、水印嵌入算法、水印檢測算法、用戶權限管理、水印日志記錄等,版權信息加密方法可對水印信息進行加密以提升水印的安全性,然后水印嵌入算法將加密后的水印信息嵌入待處理數(shù)據(jù)中。其中,水印檢測算法可從數(shù)字水印數(shù)據(jù)中提取水印信息,實現(xiàn)水印的檢測和提??;用戶權限管理負責管理系統(tǒng)中用戶的權限,確保數(shù)據(jù)的安全性和訪問控制;水印日志操作用于記錄水印嵌入和提取過程的操作日志,便于追溯和審計。Linux 操作系統(tǒng)的穩(wěn)定性和安全性使業(yè)務邏輯層在處理版權信息加密、水印嵌入算法和水印檢測算法等關鍵功能時更可靠。同時,Linux 操作系統(tǒng)的良好網(wǎng)絡性能和高并發(fā)處理能力可支持大規(guī)模數(shù)據(jù)嵌入和提取任務,滿足業(yè)務邏輯層的性能需求。
(3)數(shù)據(jù)訪問層。該層負責對處理的數(shù)據(jù)進行讀寫操作,可從存儲介質中讀取待處理數(shù)據(jù),并將處理后的數(shù)據(jù)寫回存儲介質。數(shù)據(jù)訪問層與業(yè)務邏輯層進行交互,將待處理數(shù)據(jù)傳遞給業(yè)務邏輯層進行處理,并存儲處理后的數(shù)據(jù)。Linux 操作系統(tǒng)的高度兼容性和可擴展性使系統(tǒng)能與各種存儲介質進行交互,包括硬盤、閃存等。此外,Linux還提供了強大的文件系統(tǒng)支持,可高效讀取和寫入數(shù)據(jù),確保數(shù)據(jù)的完整性和安全性。
地理信息數(shù)字水印系統(tǒng)采用模塊化的設計,由水印信息生成模塊、水印信息嵌入模塊、水印信息提取與檢測模塊、用戶權限管理模塊、水印日志記錄模塊組成,如圖2所示。
Fig.2 System function module圖2 系統(tǒng)功能模塊
1.2.1 水印信息生成模塊
水印信息生成是地理信息數(shù)字水印系統(tǒng)的核心功能之一,該模塊負責生成用于嵌入到待處理數(shù)據(jù)中的水印信息。在處理界面,用戶可輸入需要嵌入的水印信息,系統(tǒng)將根據(jù)用戶輸入的信息生成水印數(shù)據(jù),再對水印信息進行加密以提高水印的安全性,生成的水印信息將傳遞至水印信息嵌入模塊進行處理。
1.2.2 水印信息嵌入模塊
水印信息嵌入模塊負責將生成的水印信息嵌入待處理數(shù)據(jù)中。在處理界面中,用戶可選擇嵌入的數(shù)據(jù)格式和方法等參數(shù)。通過水印信息嵌入模塊,系統(tǒng)將根據(jù)用戶選擇的嵌入算法將水印信息嵌入待處理的數(shù)據(jù)中。水印嵌入過程通過訪問Linux 文件系統(tǒng)與數(shù)據(jù)訪問層進行交互,從存儲介質中讀取待處理數(shù)據(jù),并將處理后的數(shù)據(jù)寫回存儲介質。
1.2.3 水印信息提取與檢測模塊
水印信息提取與檢測模塊負責從處理后的數(shù)據(jù)中提取和檢測水印信息。在該模塊中,用戶可選擇進行水印檢測的文件路徑,系統(tǒng)將采用相應的水印檢測算法從待處理數(shù)據(jù)中提取嵌入的水印信息,并進行驗證和檢測,以判斷數(shù)據(jù)是否被侵權。
1.2.4 用戶權限管理模塊
用戶權限管理模塊負責管理系統(tǒng)中用戶的權限,確保數(shù)據(jù)的安全性和訪問控制權限。該模塊與Linux 的用戶管理和權限系統(tǒng)進行集成,確保系統(tǒng)的安全性和可控性,以控制用戶對系統(tǒng)各功能模塊的訪問權限。系統(tǒng)管理員可設置不同用戶的權限級別,限制其訪問和操作系統(tǒng)功能,從而確保只有經(jīng)過授權的用戶才能進行水印信息生成、嵌入、提取和檢測等操作,以增強系統(tǒng)的安全性。
1.2.5 水印日志記錄模塊
水印日志記錄模塊用于記錄水印嵌入和提取過程的操作并生成日志,以便追溯和審計。該模塊在Linux 環(huán)境下運行,利用Linux 的特性和功能來實現(xiàn)日志記錄的安全性和可靠性,并記錄用戶的操作行為、嵌入和提取文件信息、操作時間等關鍵信息以及用戶身份、權限驗證等與Linux 系統(tǒng)相關的額外信息。通過記錄水印操作的日志可用于后續(xù)審計、追溯和分析,有助于保障水印操作安全,提供證據(jù)支持,當發(fā)生問題或糾紛時可進行調查和解決。
針對不同的嵌入水印信息,將其分為文本版權信息和圖像版權信息分別進行處理。對于文本版權信息,首先使用快速反應(Quick Response,QR)碼進行編碼,使其轉為具有版權信息的圖像[23];然后將圖像版權信息使用Logistic 混沌映射進行加密。Logistic 混沌映射模型是一種常見的水印信息加密算法[24-25],其特點是對初始值及參數(shù)極為敏感,初始值只要有微小的差異就能導致完全不同的結果。應用于圖像置亂的Logistic 混沌系統(tǒng)的公式如式(1)所示。圖3 為使用Logistic 混沌系統(tǒng)加密前后的版權圖像信息。
Fig.3 Copyright image information before and after encryption圖3 加密前后的版權圖像信息
式中:Dn∈(0,1);0 ≤μ≤4;n=0,1,2,…
2.2.1 矢量數(shù)據(jù)數(shù)字
本文采用的數(shù)字水印算法需同時適用于點、線、面數(shù)據(jù),且具備較好的不可感知性和魯棒性。基于該設計思想,本文使用基于空間域的數(shù)字水印算法為系統(tǒng)核心,算法具體步驟如下:
步驟1:將線和面數(shù)據(jù)轉為點集合,以點要素為操作對象。
步驟2:計算點集合的最小凸包,并獲得最小凸包的最遠點對。
步驟3:分別計算點集合中其他點距離最遠點對的兩個點的最短距離,這兩個點分別記為Pf(xf,yf)、Pl(xl,yl)。
步驟4:計算點集合內的其他點到點Pf、Pl構成直線的距離D,點(xt,yt)到直線距離的計算公式為:
步驟5:計算點集合內的其他點與點Pf構成的線段距離,并計算該距離與點Pf、Pl構成線段距離的比值r。
步驟6:取距離比值r,根據(jù)哈希函數(shù)將其量化為水印索引index。
步驟7:獲取加密后的版權圖像,并將其轉為一維序列Bit,然后根據(jù)水印索引index獲取該點需要嵌入的水印比特bit。
步驟8:使用量化索引調制(Quantization Index Modulation,QIM)技術[26-27]將待嵌入的水印比特bit嵌入到距離D的小數(shù)后第δ位q中,計算公式如下:
式中:q′為距離D小數(shù)后第δ位被嵌入后的數(shù)值;S為量化步長;在D中使用q′替換q即可得到新的距離D′。
步驟9:重復上述操作,對點Pf、Pl外的其他點依次嵌入水印信息。
2.2.2 柵格數(shù)據(jù)數(shù)字水印嵌入
本文采用的柵格數(shù)據(jù)水印算法使用基于密鑰矩陣的柵格數(shù)據(jù)水印算法[28],該算法將水印信息嵌入柵格像元值的最高和次低位平面,通過生成密鑰矩陣進行模板匹配,從而實現(xiàn)水印信息的嵌入和提取。算法具體步驟如下:
步驟1:讀取待嵌入的柵格數(shù)據(jù)R,R的大小為M×N。
步驟2:讀取原始柵格數(shù)據(jù)大小,將加密后的水印信息按照柵格數(shù)據(jù)的大小進行擴頻處理,以得到新的水印信息。
步驟3:首先,遍歷柵格數(shù)據(jù)的每個像元,將水印信息的對應位與當前像元的最高位進行比較。如果水印信息與最高位相同則記錄該像元的位置,并生成一個密鑰矩陣Key。然后,在密鑰矩陣Key的相應位置處將值設置為1,從而實現(xiàn)了將水印信息嵌入到柵格數(shù)據(jù)的最高位中,并保持原始像元的最高位值不變。如果水印信息與最高位不相同,則在密鑰矩陣Key的相應位置處將值設置為0,表示該像元未嵌入水印信息。然后,轉至步驟4 進行水印嵌入操作,將產(chǎn)生的密鑰矩陣按照二進制格式進行存儲。
步驟4:采取基于特征修改的嵌入規(guī)則將水印信息嵌入柵格數(shù)據(jù)的次低位,計算公式如下:
式中:Il表示像素值次低位的值。
2.3.1 矢量數(shù)據(jù)數(shù)字水印提取
矢量數(shù)據(jù)數(shù)字水印檢測流程是水印嵌入的逆過程,具體步驟如下:
步驟1:重復水印嵌入的步驟1—步驟6,獲取水印索引index′、距離D′′。
步驟2:對距離D′′再次采用QIM 技術,從其小數(shù)后δ位的數(shù)值q′′中提取嵌入的水印比特bit′。
式中:S為量化步長。
步驟3:為了增加水印的魯棒性,在嵌入時同一水印比特會被多次嵌入到不同的點中。因此,根據(jù)水印索引index′和提取出的水印比特bit′,使用多數(shù)投票法完成水印信息組合。
步驟4:通常通過計算原始水印信息W與提取出的水印信息W′之間的相似度,來評價水印算法魯棒性。本文采用歸一化相關(Normalized Correlation,NC)值來表征相似度[29],NC值越大表示數(shù)據(jù)之間的相似度越高。
式中:O*P表示水印圖像的大??;W(i,j)、W′(i,j)分別表示原始水印信息與提出水印信息在(i,j)位置的水印比特;XNOR表示異或非運算。
2.3.2 柵格數(shù)據(jù)數(shù)字水印提取
在對柵格數(shù)據(jù)進行水印檢測與嵌入時,使用的基于密鑰矩陣的柵格數(shù)據(jù)水印算法相互對應。本文使用了基于模板匹配的水印提取算法進行水印提取。具體步驟如下:
步驟1:讀取待檢測的柵格數(shù)據(jù)I′。
步驟2:讀取密鑰矩陣,如果對應位置處的密鑰值為1則根據(jù)步驟3 進行水印提取,否則根據(jù)步驟4 進行水印提取。
步驟3:在含水印信息的柵格數(shù)據(jù)像元值的最高位二進制位中提取水印信息,提取規(guī)則為:如果該位置最高位為1,則對應的擴頻水印位的值為1;否則,對應的擴頻水印位的值為0。計算公式為:
步驟4:在含水印信息的柵格數(shù)據(jù)像元值的次低位二進制位提取水印信息,提取規(guī)則為:如果該位的二進制最高位為1,則對應的擴頻水印位的值位1;否則,對應的擴頻水印位的值為0。計算公式為:
步驟5:將得到的擴頻水印進行Logistic 逆變換,得到解密后的擴頻水印。
步驟6:將原始水印信息作為待匹配的模板,在提取的擴頻水印信息中搜尋目標。如果柵格數(shù)據(jù)未經(jīng)過任何攻擊,可在擴頻水印信息的第一個位置處獲得最佳匹配結果;一旦柵格數(shù)據(jù)遭受攻擊后,為了得到最佳匹配結果,此時掃描擴頻水印并與原始水印進行匹配,以計算兩者間的相關系數(shù)NC。
步驟7:計算所有的相關系數(shù),以提取出具有最大相關系數(shù)的塊,并將其作為提取的水印信息。
由于水印嵌入和檢測需要對矢量數(shù)據(jù)的坐標及其他參數(shù)進行修改和讀取,因此在Linux 系統(tǒng)中實現(xiàn)矢量數(shù)據(jù)讀寫是系統(tǒng)的關鍵技術之一。矢量數(shù)據(jù)數(shù)字水印的實現(xiàn)過程中,為了減少水印嵌入對數(shù)據(jù)精度的影響,需要通過原始數(shù)據(jù)的容差和分辨率來計算嵌入的位置。
目前,多采用ESRI FileGeoDatabase(FileGDB)存儲矢量數(shù)據(jù)。不同于Windows 系統(tǒng),在Linux 系統(tǒng)中GDAL 并不支持讀取FileGDB 內矢量數(shù)據(jù)容差和分辨率。為了解決該問題,本文首先將ESRI 提供的File Geodatabase API 在Linux 系統(tǒng)中進行編譯,從而實現(xiàn)GDAL 對FileGDB 的寫入操作;然后將其與jfgdb 庫(https://github.com/frett27/jfgdb)編譯后生成的.so 文件用于系統(tǒng)開發(fā)軟件的配置中,從而讀取FileGDB 中矢量數(shù)據(jù)定義和容差。讀取容差的具體操作如下:
首先,創(chuàng)建一個地理數(shù)據(jù)庫對象,并打開一個地理數(shù)據(jù)庫;然后,調用getDatasetDefinition()方法獲取指定數(shù)據(jù)集的定義信息;接下來,對定義信息中的“<XYTolerance> … </XYTolerance>”及“<XYScale>" … </XYScale>”標簽內容進行解析,分別獲得容差和分辨率。
系統(tǒng)的主要功能由水印嵌入、水印檢測、日志管理、權限管理部分組成,系統(tǒng)界面如圖4所示。
Fig.4 System interface圖4 系統(tǒng)界面
3.1.1 地理信息讀寫
本文使用GDAL 讀寫地理信息,提供了一組功能強大的工具和API,用于讀取、寫入和處理各種地理空間數(shù)據(jù)格式。GDAL 支持GeoTIFF、ArcGIS Grid 等柵格數(shù)據(jù),Shapefile、GeoJSON 等矢量數(shù)據(jù)及其他常見的地理信息格式[30],相較于ArcGIS Engine 而言具有一些顯著的優(yōu)點。首先,GDAL 是一個開源庫,免費提供給開發(fā)者使用,而ArcGIS Engine 是商業(yè)軟件,需要購買許可證;其次,GDAL 具有跨平臺性,可在多個操作系統(tǒng)上使用,包括Windows、Linux 和MacOS 等,開發(fā)者可在Linux 環(huán)境下開發(fā)和運行地理信息讀寫功能,無需進行系統(tǒng)平臺的遷移和調整。
3.1.2 水印信息生成
ZXing 是谷歌開源的支持二維碼、條形碼等圖形的生成類庫,可實現(xiàn)對QR 碼的生成和解碼[31]。因此,本文使用ZXing 庫將文本版權信息轉為QR 碼。首先,將文本版權信息編碼為字符串的形式作為QR 碼的內容;然后,設置大小、糾錯級別、邊距等QR 碼參數(shù);最后,使用ZXing 庫提供的API,將QR 碼內容和參數(shù)作為輸入,生成包含版權信息的QR 碼圖像對象,生成的QR 碼圖像對象不做本地存儲和加密操作。
在使用Logistic 混沌系統(tǒng)進行加密時,首先需要初始化邏輯映射的初始值,創(chuàng)建一個長度為圖像像素數(shù)量的邏輯映射數(shù)組;然后,通過迭代生成邏輯映射數(shù)組,按行優(yōu)先的順序遍歷圖像的每個像素,獲取像素的RGB 值;接下來,將邏輯映射數(shù)組中的當前值乘以255,將結果轉換為整數(shù);最后,將圖像像素的RGB 值與邏輯映射數(shù)組的當前值進行異或運算,并用改值更新像素的RGB 值。重復上述操作直至遍歷完所有像素。
3.1.3 水印信息嵌入
在實現(xiàn)地理信息的讀寫中,首先使用gdal.AllRegister()方法來初始化GDAL,確保它能正確加載支持的數(shù)據(jù)格式驅動程序;然后,使用gdal.Open()方法打開地理信息數(shù)據(jù)集。該方法首先將數(shù)據(jù)集路徑作為參數(shù),并返回一個gdal.Dataset 對象,表示打開的數(shù)據(jù)集;然后使用gdal.Get-DriverByName()方法獲取適當?shù)臄?shù)據(jù)驅動程序;最后使用driver.Create()方法創(chuàng)建新的數(shù)據(jù)集,為存儲嵌入后的數(shù)據(jù)作準備。
矢量和柵格數(shù)據(jù)讀寫操作的方法并不相同,需要進行區(qū)分。對于柵格數(shù)據(jù),通過gdal.Dataset 對象可獲取數(shù)據(jù)集的相關信息,例如數(shù)據(jù)集寬度(width)、高度(height)、波段數(shù)量(bandCount)等,然后使用gdal.Dataset 對象的GetRasterBand()方法獲取波段對象,并使用ReadAsArray()方法讀取柵格數(shù)據(jù)的像素值。在使用水印嵌入階段,使用算法對像素值進行修改后,通過gdal.Dataset 對象的WriteArray()方法將處理后的柵格數(shù)據(jù)寫入數(shù)據(jù)集。
對于矢量數(shù)據(jù)集,使用gdal.Dataset 對象的GetLayer()方法獲取圖層對象,并使用遍歷等方法讀取矢量數(shù)據(jù)的要素和屬性信息。在水印嵌入階段,使用Geometry 類的set-Point()方法對點坐標進行修改。在完成對數(shù)據(jù)集的讀寫操作后,使用gdal.Dataset 對象的delete()方法關閉數(shù)據(jù)集,釋放資源,并使用gdal.GDALDestroyDriverManager()方法關閉GDAL 的使用。
對于水印信息是否有效嵌入,本文采用數(shù)據(jù)是否被改動來進行判斷,即比較嵌入前后的坐標或像元值是否一致,若不一致則認為水印信息有效嵌入。圖5、圖6 分別展示了系統(tǒng)中矢量數(shù)據(jù)水印嵌入的參數(shù)選擇及嵌入進度界面。
Fig.5 Watermark embedding parameter selection interface圖5 水印嵌入?yún)?shù)選擇界面
Fig.6 Watermark embedding progress interface圖6 水印嵌入進度界面
3.1.4 水印信息檢測
水印信息檢測是水印信息嵌入步驟的逆過程,首先需要使用與水印信息嵌入部分相同的步驟打開讀取的數(shù)據(jù)集。對于柵格數(shù)據(jù)集,首先使用gdal.Dataset 對象的GetRasterBand()方法獲取波段對象,然后使用ReadAsArray()方法讀取柵格數(shù)據(jù)的像素值,最后使用水印檢測階段的步驟實現(xiàn)提取水印。
對于矢量數(shù)據(jù)集,首先使用gdal.Dataset 對象的Get-Layer()方法獲取圖層對象,然后獲取到圖層對象的Geometry 類,最后通過Geometry.GetX()、Geometry.GetX()分別獲取點的X、Y 坐標。基于讀取的像元值和坐標值,首先采用QIM 技術從其中提取出嵌入的水印比特,然后獲取水印索引,最后根據(jù)水印索引將水印比特組成完整的水印信息。
在水印信息檢測部分,若提取出的水印信息能正常識別出版權所有,則認為水印信息檢測有效。圖7 為系統(tǒng)的水印檢測結果界面。
Fig.7 Watermark detection result interface圖7 水印檢測結果界面
3.2.1 實驗數(shù)據(jù)
為驗證本文設計系統(tǒng)算法的不可感知性和魯棒性,選取了3 種不同的矢量地理數(shù)據(jù)和柵格數(shù)據(jù)用于實驗,相關信息如表1所示。
Table 1 Experimental data information表1 實驗數(shù)據(jù)信息
3.2.2 不可感知性分析
不可感知性是指經(jīng)過系統(tǒng)處理后的數(shù)據(jù)與原始的數(shù)據(jù)在視覺和精度上是否存在誤差。本文通過計算水印嵌入前后數(shù)據(jù)坐標與像元值之間均方根誤差(Root Mean Square Error,RMSE)來定量評價算法的不可感知性。
式中:n為頂點或像元數(shù)量;x、x′分別表示對應頂點的坐標或像元的像元值;RMSE 值越小,表示兩個數(shù)據(jù)之間的誤差越小,不可感知性越好。
表2 展示了不同數(shù)據(jù)不可感知性實驗的結果。由結果可知,6 種數(shù)據(jù)的頂點坐標或像元值均發(fā)生了改變,但改變量非常小,仍屬于可容忍的范圍內。因此,本文系統(tǒng)具有良好的不可感知性。
3.2.3 魯棒性分析
旋轉、縮放、平移(Rotation、Scaling and Translation,RST)是矢量地理數(shù)據(jù)最常見的操作,也是水印算法面對的最常見的攻擊之一。為了驗證本文設計系統(tǒng)的魯棒性,分別對矢量數(shù)據(jù)進行不同強度的RST 攻擊,以計算攻擊后水印信息與原始水印信息的NC值。
由表3 實驗結果可知,RST 攻擊后的NC 值均為1.00,這是由于矢量數(shù)據(jù)水印算法將水印嵌入由點要素最小凸包構建的幾何特征中,在提取水印時不受RST 影響。
Table 3 Experimental results of RST attack表3 RST攻擊實驗結果
高斯隨機噪聲攻擊是柵格數(shù)據(jù)常見攻擊之一,設定高斯噪聲攻擊均值為0,方差從0.1 依次遞增到0.5,柵格數(shù)據(jù)攻擊后提出的水印信息與原始水印信息的NC 值如表4 所示。由此可知,3 種柵格數(shù)據(jù)在各種強度的攻擊下NC 值均大于0.9,表明本文系統(tǒng)對高斯隨機噪聲攻擊具有極強的魯棒性。
Table 4 Experimental results of Gaussian random noise attack表4 高斯隨機噪聲攻擊實驗結果
綜上,本文系統(tǒng)對矢量數(shù)據(jù)或柵格數(shù)據(jù)常見的攻擊均具有較好的魯棒性。
本文基于GIS 軟件國產(chǎn)化的背景及開發(fā)適用于Linux操作系統(tǒng)的地理信息數(shù)字水印系統(tǒng)的需求,設計并實現(xiàn)了基于Linux 系統(tǒng)的地理信息數(shù)字水印系統(tǒng)。該系統(tǒng)基于開源的GDAL 地理信息處理庫開發(fā)而成,系統(tǒng)內部分別封裝了處理矢量和柵格數(shù)據(jù)的數(shù)字水印算法,可滿足不同類型地理信息版權保護的需求。
該系統(tǒng)還是滿足了現(xiàn)階段在Linux 操作系統(tǒng)上使用數(shù)字水印系統(tǒng)的迫切需求,可被科研單位、政府機構等在國產(chǎn)操作系統(tǒng)中進行地理數(shù)據(jù)的版權保護,具有極強的使用價值與現(xiàn)實意義。實驗表明,該系統(tǒng)雖然具有優(yōu)良的不可感知性,對常見的數(shù)據(jù)攻擊具有較強的魯棒性強,但對柵格數(shù)據(jù)數(shù)字水印算法的設計過于復雜,無形中增加了柵格數(shù)據(jù)的處理時間。未來,可采取多線程處理、優(yōu)化算法設計等措施提升柵格數(shù)據(jù)的處理效率。
此外,水印嵌入操作仍不可避免地修改了數(shù)據(jù),后續(xù)可將無損水印和區(qū)塊鏈技術相結合,并將其應用于地理信息數(shù)據(jù)水印系統(tǒng)中。