【正文】
+定義指示對象數(shù)組大小的變量 in t i = 06將正確數(shù)據(jù)塊的數(shù)據(jù)重新組合成一個對象數(shù)組 co rectO b j將修復(fù)的數(shù)據(jù)存入相應(yīng)對象否是 圖 4(d) EVENODD譯碼流程圖 i co rectO b j . len g thg etC o lu m n Dat a ( p ict u reI n co m p [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在( d atac ach e in t [][] ) 中horiExclusive _ OR ( int [][] )根據(jù)公式 ( 2 ) 單獨(dú)處理一個數(shù)組生成對象數(shù)組中的第 i 列水平校驗數(shù)據(jù)i ++定義指示對象數(shù)組大小的變量 in t i = 02將修復(fù)的數(shù)據(jù)存入出錯對象 err o r 1計算對角校驗公共因子 S 使用公式 ( 4 )利用公式 ( 5 ) 恢復(fù)第 err o r 1 個數(shù)據(jù)塊第 i 列的數(shù)據(jù)將正確數(shù)據(jù)塊數(shù)據(jù)重新組合成一個對象數(shù)組 co rectO b j結(jié)束i co rectO b j . len g thg etC o lu m n Dat a ( p ict u reI nco m p [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在( d atac ach e in t [][] ) 中i ++定義指示對象數(shù)組大小的變量 in t i = 0將修復(fù)的數(shù)據(jù)存入相應(yīng)對象否是是否 圖 4(e)EVENODD譯碼流程圖 i co rectO b j . len g thg etC o lu m n Dat a ( p ict u reI n co m p [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在( d atac ach e in t [][] ) 中horiExclusive _ OR ( int [][] )根據(jù)公式 ( 2 ) 單獨(dú)處理一個數(shù)組生成對象數(shù)組中的第 i 列水平校驗數(shù)據(jù)i ++定義指示對象數(shù)組大小的變量 in t i = 03將修復(fù)的數(shù)據(jù)存入出錯對象 err o r 1diagExclusive _ OR ( int [][] , S )根據(jù)公式 ( 1 ) 獲得 S ; 根據(jù)公式 ( 3 ) 單獨(dú)處理一個數(shù)組生成對象數(shù)組中的第 i 列對角校驗數(shù)據(jù)獲取前 m + 1 個正確數(shù)據(jù)塊的數(shù)據(jù)并重新組合成一個對象數(shù)組 co rectO b j結(jié)束i co rectO b j . len g thg etC o lu m n Dat a ( p ict u reI n co m p [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在( d atac ach e in t [][] ) 中定義指示對象數(shù)組大小的變量 in t i = 0將修復(fù)的數(shù)據(jù)存入相應(yīng)對象i ++否是是否 圖 4(f)EVENODD譯碼流程圖 4根據(jù)公式 ( 7 ) 求得公因子 S in t u = 0 u m in t m = tem p M em o ry . len g th 2 in t i = 0 i tempMemory [ 0 ]. getColumng etC o lu m n Dat a ( p ict u reI n co m p [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在 ( d atac ach e in t [][] ) 中并將該數(shù)據(jù)增加一列根據(jù)公式 ( 8 ) 得到水平校驗數(shù)組 SH 根據(jù)公式 ( 9 ) 得到對角校驗數(shù)組 SDK = ( m ( error 2 error 1 ) 1 )% mK != m 1dataCache [ k ][ error 2 ] = sd [( error 2 + k + m )% m ] ^ dataCache [( k + error 2 error 1 + m )% m ][ error 1 ] 。 與 encode 算法思想一樣,我們同樣由待處理的 7 個不同對象( 5 個原數(shù)據(jù)塊, 2 個冗余校驗數(shù)據(jù)塊),獲得最小數(shù)據(jù)單元,然后根據(jù) 譯碼 原理對最小數(shù)據(jù)單元進(jìn)行處理。根據(jù) EVENODD 譯碼原理,我們可以把 該算法分為兩部分來實現(xiàn): ( 1)根據(jù)錯誤數(shù)據(jù)塊號找到對應(yīng)的處理方法。它是在尚未破壞的數(shù)據(jù)塊的數(shù)據(jù)的基礎(chǔ)上運(yùn)用譯碼原理進(jìn)行操作的。它與編碼算法配合使用,使用的前提是已經(jīng)由編碼算法產(chǎn)生出了冗余校驗值。 diagRedun = new pictureInComp(temp)。//恢復(fù)原數(shù)據(jù)格式將數(shù)組轉(zhuǎn)置 horiRedun = new pictureInComp(temp)。//獲取水平校驗(公式 1) tempMatrix2[i] = (dataCache, (dataCache))。 i++){ dataCache = (tempMemory, i)。 for(int i = 0 。/暫存運(yùn)算過程中對角輸入對象數(shù)組是否合法結(jié)束對象數(shù)組中每個元素中的數(shù)據(jù)各行各列是否相同將對象數(shù)組中的數(shù)據(jù)轉(zhuǎn)移到本地變量中 ( tem p M em o ry p ict u reIn C o m p [] )調(diào)整對象數(shù)組中每個元素的數(shù)據(jù)大小使其各行和各列的大小相同i tem p M em o ry . len g thg etC o lu m n Dat a ( p ict u reIn co mp [] , in t )獲取該對象數(shù)組中每個元素第 i 列的數(shù)據(jù)并組成一個新的數(shù)組存放在 ( d atac ach e in t [][] ) 中horiExclusive _ OR ( int [][] )根據(jù)公式 ( 2 ) 單獨(dú)處理一個數(shù)組生成對象數(shù)組中的第 i 列水平校驗數(shù)據(jù)diagExclusive _ OR ( int [][] , S )根據(jù)公式 ( 1 ) 獲得 S ; 根據(jù)公式( 3 ) 單獨(dú)處理一個數(shù)組生成對象數(shù)組中的第 i 列對角校驗數(shù)據(jù)獲得上述的數(shù)據(jù)并實例化水平校驗對象對角校驗對象i ++定義指示對象數(shù)組大小的變量 in t i = 0開始從接口獲得待處理對象數(shù)組否是 是是否否提示出錯原因 校驗位的數(shù)據(jù)值的轉(zhuǎn)置數(shù)據(jù) int[][] temp= new int[tempMemory[0].getRow()][tempMemory[0].getColumn()]。 tempMatrix1= new int[tempMemory[0].getColumn()][tempMemory[0].getRow()]。將該過程置于一個循環(huán)中依次處理對象的每一 列,每列產(chǎn)生的水平校驗值和對角校驗值依照相反的方式重新組合便形成了兩個冗余對象即水平校驗對象和對角校驗對象。這個數(shù)組就是最小的處理單元?;谏鲜銮闆r,設(shè)計能從對象數(shù)組中獲取某列的方法 getColumnData( pictureInComp[] obj, int i)成為必要。 VENODD 編碼算法 1. 算法描述 EVENODD 編碼算法是產(chǎn)生冗余校驗數(shù)據(jù)的核心算法。 .根據(jù) EVENODD 的編碼原理,處理的數(shù)組大小 m 必須為素數(shù),在整個軟件的實現(xiàn)過程中取 m= 5。 3. 譯碼 該功能是在實際生活中運(yùn)用最廣的一部分,它通過尚未有數(shù)據(jù)損失的原始圖像和通過編碼形成的尚未遭到數(shù)據(jù)破壞的校驗數(shù)據(jù)將已破壞的數(shù)據(jù)恢復(fù)出來(已破壞數(shù)據(jù)塊的數(shù)目≤2)。 ? 圖像表達(dá):像素經(jīng)過處理后是存儲在二維數(shù)組中的,該子功能的作用是將二EVENODD 編碼的實現(xiàn) 圖像處理 編碼 譯碼 圖 2 功能結(jié)構(gòu)圖 維數(shù)組以圖片的格式表達(dá)出來,與圖像分割功能作用相反。它是配合軟件的仿真而單獨(dú)設(shè)計的。 ? 圖像保存:將經(jīng)過處理后的圖片保存在當(dāng)前的文件夾中或者其他文件夾中。因此,圖像處理功能模塊又可以分成以下幾個子功能模塊,如:圖像載入、圖像保存、圖像破壞、圖像分割、圖像表達(dá)等。 通過對上述內(nèi)容的設(shè)計我們必須達(dá)到以下目標(biāo): ( 1)滿足用戶對 EVENODD 編碼過程的直觀理解; ( 2)創(chuàng)建友好的人機(jī)操作界面; ( 3)滿足用戶對 5 張簡單圖片的備份; ( 4)滿足用戶利用備份圖片和尚未被破壞的原圖片還原出錯圖片 軟件總體功能結(jié)構(gòu) 功能結(jié)構(gòu)圖 軟件功能圖如圖 2: 功能說明 1. 圖像處理 為了方便 EVENODD 碼 的演示,本軟件所選用的輸入數(shù)據(jù)就是圖片。 ( 2) 譯碼 算法是體現(xiàn)運(yùn)用 EVENODD 原理能夠勝任將出錯的兩個數(shù)據(jù)塊的數(shù)據(jù) 恢復(fù)的關(guān)鍵,也是體現(xiàn)了本原理在現(xiàn)實運(yùn)用中具有的高可靠性和高穩(wěn)定性。一旦我們首先計算出1,mi j ja ??,我們可以通過公式 ( 13) 計算出 公式( 13)的正確性,根據(jù)公式( 1)和公式( 8)可以得到。 第一步給 s 賦初值 s = (j i)1m 得到 s。 下面我們必須證明這個算法只能唯一恢復(fù)第 i列和第 j 列的數(shù)據(jù)。 21 ,00( ( ))mmm l t tlta?????????所有的垂直校驗列的值異或(除掉共同因子 S),從 0 到 m1(每列m 行,但最后一行的值為 0) ,因此也就是所有的 0 到 m- 1 列所有數(shù)據(jù)位異或 。 ( 3) i m , j = m+1,這種情形和編碼的過程相似,在這里不再贅述。因此所有的對角線都有相同的公共因子 S。 我們假設(shè) 譯碼算法 的四種情 況: ( 1) i = m , j = m+1,這種情形和編碼過程完全一樣,很顯然此算法可行; ( 2) i〈 m , j = m,注意公共因子 S的校驗值是由公式( 4)得到的,它 由對角線位 (i1m,0), (i2m,1),??, (i,m1)上的數(shù)值相異或 得到 。根據(jù)異或的性質(zhì)我們 可以很容易知道這是完全可行的。 定理一: EVENODD 譯碼算法 可以恢復(fù)任意 2 個數(shù)據(jù)塊出錯的數(shù)據(jù)。我們將在后面的證明中很好地利用 m 是素數(shù)的這個條件。通過以上的運(yùn)行過程我們可以發(fā)覺在整個算法運(yùn)行當(dāng)中 m 必須是素數(shù)。我們讓5( ) 1 3 2ms j i? ? ? ? ? ? ? ? ? ? ?,這時計算過程如表 5。這意味著,對角校驗是奇校驗。 表 4 初始數(shù)據(jù) ? 0 ? 1 0 1 1 ? 1 ? 0 0 0 1 ? 1 ? 0 0 1 1 ? 1 ? 1 1 0 0 11 , 1 1 ,0( ) 4mmmi m i l llS a a?? ? ? ? ? ? ? ??? ? ? , 公 式 ( )1, 1 , 1 ,0( ) 0 2 5mmmk i i m k i l lllia S a a k m?? ? ? ? ? ? ? ???? ? ? ? ? ? ?, , 公 式 ( ),0 0 2 6mk i k lllka a k m??? ? ? ? ? , 公 式 ( )22, , 100( ) ( ) 7mml m l mllS a a?? ???? ? ? ? , 公 式 ( )( 0 ),0,1( 1 ), 1 ,0,8( ) 9mmu u lll i jmu u m u l lll i jSaS S a a???? ? ? ?????? ? ? ?, 公 式 ( ), 公 式 ( )( 1 )1,( 0 ), ( ) , , ,( 1 ) ( ) 1 0 0 1( 2 )( 3 ) ( ) 1 , 2mmm m ls j s j i i s i s s jjsmS e t s j i a n d a for l mLe t a a a n d a S aS e t s s j i if s m the n sto p e lse g o to ste pS?? ? ? ?? ? ?? ? ? ? ? ? ? ? ? ?? ? ? ?? ? ? ? ? ? ? 第一步要做的就是 找到公共因子 S,即將這個數(shù)組最后兩列相異或。 ( 2) im,j=m,一個冗余校數(shù)據(jù)塊和一個信息盤遭到損壞,為了能夠重新恢復(fù) i 數(shù)據(jù)塊,首先恢復(fù)出參數(shù) S, 假定 1, ,0 ,0mla l m? ? ? ?然后通過下面的公式, i數(shù)據(jù)塊的信息符就可以重建 ( 3) im,j=m+1,這種情況, i 信息符數(shù)據(jù)塊可以根據(jù)平行校驗數(shù)據(jù)塊進(jìn)行異或,得到恢復(fù) ( 4) im,jm,遭到損壞的是兩個信息符的數(shù)據(jù)塊,不像前面三種情況那么簡單