膨脹演算法
❶ 問一下關於腐蝕和膨脹演算法的問題
求演算法復雜度一般不會使用計算機進行驗證而是分析程序運行所需要的機器指令個數與輸入的數據之間的函數關系。如果你想編寫一個程序來尋找提高速度的演算法,我想是本末倒置了。首先你得有幾個正確的演算法,然後才能為這幾個演算法分別編程,最後使用測試案例來驗證哪個演算法的性能更好些。
❷ 數字圖像處理里的腐蝕和膨脹到底是指什麼
膨脹
定義: D = X ⊕ S = { x,y | Sxy∩X ≠Ф}
意義:當結構元素 S 的原點移動到( x,y)位置,如果 S與物體X有任何一點同時為 1,則新圖象上相應點為 1;如果 S與 X完全沒有相交,新圖象上點為 0。
演算法:
用結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做 「或」操作。
如果都為0,結果圖像的該像素為0。否則為 1。
S是由B映像的位移與X至少有一個像素相同時B的中心點位置的集合。
膨脹的作用:
用 3x3的結構元素時,使物體的邊界沿周邊增加一個像素。
把圖象周圍的背景點合並到物體中。如果兩個物體距離比較近,通過膨脹可能連通在一起。
對於填補圖象分割後物體中的空洞十分有用
腐蝕
定義: E = X Θ S = { x,y | Sxy⊆X}
意義:當結構元素 S 的原點移動到(x,y)位置,如S 完全包含在 X 中,則新圖象上該點為 1,否則為 0。
演算法:
用結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做 「與」操作。
如果都為 1,結果圖像的該像素為 1。否則為 0。
結果圖像E是由S完全包括在X中時S的當前位置的集合
作用:
用 3x3的結構元素時,使物體的邊界沿周邊減少一個像素。
去掉小於結構元素的物體,選擇不同大小的結構元素,可以去掉大小不同的物體。
如果兩物體之間有細小的連通,當結構元素足夠大時,可以將物體分開。
不同的結構元素,可導致不同的結果。
❸ 怎麼計算中國通貨膨脹率
通貨膨脹率=(T時期價格矯正指數-(T-1)時期價格矯正指數)除以(T-1)時期價格矯指正指數
其中,價格矯正指數指名義GDP與實際GDP的比
❹ 通貨膨脹演算法。。。求指教!!!!!!!!!!!!
房價指數的增長率其實是通貨膨脹率+實際增長率。
所以房價指數的實際增長率等於:
216/182-(1+0.016)=0.171,意味著房價實際增長率為17.1%
❺ 圖像處理中的腐蝕與膨脹是什麼意思
圖像處理分為多種,對於不同的圖像腐蝕和膨脹的定義不同。
1、形態學圖像處理是在圖像中移動一個結構元素,然後將結構元素與下面的二值圖像進行交、並等集合運算;先腐蝕後膨脹的過程稱為開運算。
它具有消除細小物體,在纖細處分離物體和平滑較大物體邊界的作用。先膨脹後腐蝕的過程稱為閉運算。它具有填充物體內細小空洞,連接鄰近物體和平滑邊界的作用。
2、對灰度圖像的膨脹(或腐蝕)操作有兩類效果:
(1)如果結構元素的值都為正的,則輸出圖像會比輸入圖像亮(或暗);
(2)根據輸入圖像中暗(或亮)細節的灰度值以及它們的形狀相對於結構元素的關系,它們在運算中或被消減或被除掉。
腐蝕就是使用演算法,將圖像的邊緣腐蝕掉。作用就是將目標的邊緣的「毛刺」踢除掉。
膨脹就是使用演算法,將圖像的邊緣擴大些。作用就是將目標的邊緣或者是內部的坑填掉。
使用相同次數的腐蝕與膨脹,可以使目標表面更平滑。
(5)膨脹演算法擴展閱讀:
1、圖像變換:由於圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。因此,往往採用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散餘弦變換等間接處理技術,將空間域的處理轉換為變換域處理,不僅可減少計算量,而且可獲得更有效的處理。
目前新興研究的小波變換在時域和頻域中都具有良好的局部化特性,它在圖像處理中也有著廣泛而有效的應用。
2、圖像編碼壓縮:圖像編碼壓縮技術可減少描述圖像的數據量(即比特數),以便節省圖像傳輸、處理時間和減少所佔用的存儲器容量。
壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。編碼是壓縮技術中最重要的方法,它在圖像處理技術中是發展最早且比較成熟的技術。
3、圖像增強和復原:圖像增強和復原的目的是為了提高圖像的質量,如去除雜訊,提高圖像的清晰度等。圖像增強不考慮圖像降質的原因,突出圖像中所感興趣的部分。
如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節明顯;如強化低頻分量可減少圖像中雜訊影響。圖像復原要求對圖像降質的原因有一定的了解,一般講應根據降質過程建立「降質模型」,再採用某種濾波方法,恢復或重建原來的圖像
參考資料來源:網路-圖像處理
❻ 地球膨脹運動的參數演算法與膨脹階段劃分
在論證了地球的脹縮運動以後,有關地球膨脹運動的計算及其演算法、地球膨脹階段的劃分等就成為人們必須考慮的主題。
在本節里,將討論地球膨脹階段的地球表面積、體積、半徑等參數的改變數計算方法,對如何根據實際資料求取地球膨脹的數值等技術手段做出說明,並列出相關計算公式。根據以往的研究成果對地球膨脹階段的劃分提出新的認識,將地球的膨脹劃分為:表面積擴充階段、體積擴充階段、岩漿外溢量持續增大階段、岩漿外溢量持續減小階段、地球收縮階段等。地球的膨脹過程既不是半徑一概增大的過程,也非單調減小的過程,而是一種受周期性函數作用力控制的,地球半徑在「增加一減小—增加—減小」的循環往復中逐漸增長。
1.膨脹參數的求取
地球膨脹的證據為我們提供了分析研究地球膨脹量的強有力資料。
在尚未論述洋中脊和海溝的特點與形成原因之前,首先假設以下條件成立:
(1)洋中脊是地球膨脹時期的產物,洋中脊的擴張范圍就是地球的膨脹表面積之一。
(2)海溝是板塊與板塊結合地帶,是一種向地幔層方向褶皺的「負向山脈」,它與洋中脊不是同期產物。
(3)假設地球膨脹時期的造山運動大約等於零,地球的表面積縮小量約為零。
(4)假設地球膨脹時期相鄰兩陸塊之間若不被後期的洋中脊分開,就不存在顯著的分離。
於是,地球的膨脹參數可以按照如下方法獲得:
1.1地球膨脹所產生的表面積改變數(△S)
設地球收縮後且膨脹前的表面積為SA,地球膨脹運動結束後且開始膨脹前的表面積為SB,則地球膨脹運動所產生的表面積改變數
圖4-4萊茵地塹綜合剖面圖
(a)地溫剖面圖(據Illies,1965);(b)布格異常剖面(據Mieller等,1967);(c)磁測剖面(據Roche和Wohlehberg,1969);(d)地質剖面1(據Mueller,1969);(e)地質剖面2(據Sittler,1967);(f)總體剖面(據Illies,1967)
地球動力與運動
式中,各變數單位均為km2。
式(4-1)是一個理論方程,實際工作中是沒法操作的。在實際工作中,地球表面積的改變數可按下式求取:
地球動力與運動
或者:
地球動力與運動
式中,S1,S2,S3,…,Sn等在形成時期、單位等方面具有一致性。可以進行如下約定:
S1——洋中脊擴張范圍面積(km2);
S2——板塊之間裂谷范圍面積(km2);
S3——板塊內部裂谷范圍面積(km2);
S4——板塊內部地塹范圍面積(km2);
S5——板塊內部所有正斷裂平面張開范圍面積(km2);
Sn——相當於式(4-2)中的δ,其他可能遺漏的因地球膨脹產生的未單獨列出的面積(km2)。取n=6,則Sn=S6,即地球膨脹的表面積增加包括6方面內容。那麼式(4-2)、式(4-3)可改為:
地球動力與運動
求S1
依據假設條件,洋中脊的擴張范圍就是地球的膨脹表面積,只要求得洋中脊的范圍面積,即求得了S1。顯然:
地球動力與運動
式中,S11,S12,S13,…,S1n等,分別代表不同洋脊的擴張范圍面積,如:北太平洋洋脊、南太平洋洋脊、智利洋脊、印度洋—太平洋洋脊等等。下面以北太平洋洋脊為例,說明如何計算洋脊的擴張范圍:
地球膨脹發展到一定程度,首先引起固態岩石圈的張開,洋中脊的產生與發展則建立在板塊或板塊間的破裂基礎上,隨著地球的膨脹,「液」態的地幔物質膨脹速度大於固態物質的膨脹速度,因而岩漿順著板塊間的裂口向「外」拓展空間,以平衡因膨脹而產生的體積增量,這種過程在地球膨脹期內將不斷地進行,在進行過程中,外逸的岩漿不斷地排開最初的板塊裂口,使板塊之間的距離越來越大,當地球膨脹停止時,在原來的狀態下,出現了擴張後的大面積增量,即為所求增量。板塊最初的裂紋無疑是岩漿填充時的背景,由於板塊最初的裂紋不同,洋中脊具有不同的擴張形態,其中被人們稱為轉換斷層的裂縫,即是最初的裂紋呈折線的結果。只要圈定出板塊最初裂紋,即求得了洋中脊的擴張范圍,再用求積儀計算圈線所佔面積。
完成全球各洋脊的擴張范圍面積計算,即求得了S1。
採用找最初彌合線—圈線—計算面積的辦法,同樣施於對S2、S3、S4、S5、S6的求取,最後對所得各類面積用式(4-4)累加,即可獲得地球膨脹後地球表面積的擴張增量。
1.2地球膨脹所產生的體積改變數(△V)
在獲得了地球膨脹的表面積增量後,求取體積的增量顯得簡單一些。為了便於分析,先看幾條剖面圖(見圖4-5)。
圖4-5幾條過洋中脊的地形剖面(據Heirtzler,1966)
(a)大西洋剖面(據米康,1962);(b)東太平洋剖面(據H.W.米納德,1969);(c)南太平洋剖面
三條不同海域的過洋中脊的地形圖,是各地洋中脊不斷變化形成的縮影,顯而易見,他們共同具有的特徵就是從洋中脊中心向兩側逐漸變緩,形成了中間高、兩側低的勢態,這是地幔物質因膨脹、體積變大、外逸卸載所造成。因此,在計算地球膨脹的體積改變數時,應按照如下算式計算(見圖4-6):
地球動力與運動
式中:V1——由表面積改變數換算所得體積改變數,單位:km3。換算式如下:
地球動力與運動
V2——洋中脊的多餘外逸量,單位:km3。算式如下:
地球動力與運動
ζ——調節數,單位與其他項一致,為遺漏量或計算誤差,可正可負,其絕對值相比之下應為小。
式(4-7)中,RA為地球膨脹前的地球半徑;R△為地球膨脹後地殼半徑的伸長量。由於地殼的張裂,地幔膨脹一方面通過地殼的裂口外逸部分岩漿,另一方面直接將地殼向「外」推開而擴展自身空間,R△即為這種效應的改變數;RB為地球膨脹後最終量,與R△之間的增量等於洋中脊在RB之外的多餘量,它是洋中脊的凸隆體積部分碾平後覆蓋地球表面所形成的厚度值(參閱圖4-6)。
圖4-6地球膨脹參數關系
式(4-9)中,i值的改變表示洋中脊的不同,不同的洋中脊有不同的分布范圍和不同的高度、不同的體積,計算式如下:
地球動力與運動
式中,S為洋中脊的橫斷面面積;dl為微元的長度。
1.3地球膨脹所產生的半徑改變數(△R)
由圖4-6可知,地球膨脹運動所產生的地球半徑的改變數計算式為:
地球動力與運動
也可由下式計算:
地球動力與運動
式中,RA或RB可以通過現代地球物理探測方法獲得,按照地球目前處於近銀點附近的一般觀點,地球正處於地球收縮期,地球現在的半徑測值既不是RA,也不是RB,要想獲得RA或RB,還要計算地球在喜馬拉雅造山運動時期的地球半徑改變數。
地球半徑的改變數也可以通過體積改變數和表面積改變數直接計算獲得。
2.地球的膨脹階段劃分
自從人們認識了地球曾經發生過膨脹運動後,有關地球膨脹的模式就一直成為人們探求的課題。在本書內容形成以前,有四種膨脹模式較為突出:單一膨脹式、非對稱膨脹式(凱里模式)、威廉斯模式、脈沖膨脹式。四種有關地球的膨脹模式,由於缺乏系統理論的指導,盡管在某一方面或某幾方面考慮周到,但總不能避免局限性,有時甚至出現不能自圓其說的局面。
我們說地球的膨脹體現有兩種,一種是短周期的膨脹,主要是由於地球繞太陽運行受太陽的作用而引起,體現在地球大氣層的變化上;另一種是長周期的膨脹,主要是由於地球繞銀核運行受銀核的作用而引起,體現在地球的岩石圈的變化上。地球膨脹是由於地球受到了膨脹力作用,這種作用力實質上是一種脹縮力。在地球軌道一周內,一段時期表現為膨脹力作用,而在另一段時期內則表現為壓縮力作用。地球所受膨脹力既不是一概增大的過程,也不是單調減小的過程,而是在壓縮力之後表現為單調增加,當達到極大值後又表現為單調減小,是一種含周期性函數特徵的作用力,在這種力作用下,地球的膨脹表現在地球半徑的增量△R隨時間呈一種幅度、跨度為非對稱的曲線形態,這種形態可用圖4-7加以示意,由此可見,在地史長河中,地球的半徑在「增加—減小—增加—減小」的循環往復中逐漸地增長。
圖4-7膨脹過程中地球半徑增量隨時間變化關系曲線示意圖
膨脹力作用於地球使地球發生膨脹的過程可分為四個階段:表面積擴充階段、體積擴充階段、膨脹力持續增大作用階段、膨脹力持續減小直至為零作用階段,各階段用圖簡示如圖4-8。
圖4-8陸塊的張裂過程
1—地球膨脹使陸塊分裂而增加地球表面積;2—地球繼續膨脹使地幔外逸而增加地球體積;3—地球受不斷增大的膨脹作用,地球表面積、體積體積變大的同時、岩漿大量外逸,洋中脊越來越向外凸出;4—地球仍在膨脹,但作用力逐漸變小,岩漿外逸量逐漸減小,洋中脊向內凹進
2.1表面積擴充階段
地球的表面積擴充階段是指地球從地殼發生張裂開始到岩漿從裂谷中逸出前的階段。
地球受到膨脹力作用後,地球的各個層圈都將發生膨脹改變,這些改變數全部體現在包裹在外的地殼上,由於膨脹所引起的體積增加必須通過表面積的增加來完成,所以,作為剛性體的地殼發生張裂,張裂氛圍板間張裂和板內張裂,張裂逐漸加深加寬,一方面完成了體積增量的空氣填充,主要的一方面是使地球的表面積得到了擴張。這樣的張裂過程在地球膨脹的最初階段,隨著地球體積的變大,由裂縫—裂口—裂谷逐漸展開的(圖4-9)。
圖4-9板塊的破裂與運動過程
A—板塊在地球的脹縮力作用下在中部發生破裂;B—隨著持續膨脹,裂縫形成開口;C—形成裂谷
2.2體積擴充階段
地球的體積擴充階段是指岩漿從裂谷中逸出開始,到岩漿停止持續流出為止。這一階段實質上包含了後面即將談到的兩個階段。
盡管地球的體積膨脹從理論上講是在地球受膨脹力作用開始的瞬間就已經開始,但卻無法在實際中將這一起點劃分出來。將地球的體積擴充階段的起點定在岩漿開始從裂谷中大量外逸,是具有實際意義和理論意義的。
2.3岩漿外逸量持續增大階段
岩漿外逸量持續增大階段是指岩漿從裂谷中大量逸出開始,到岩漿外逸量突然急劇下降前為止,在洋中脊變化曲線上表現為上升趨勢出現急劇下降(如圖4-10)。
圖4-10大西洋洋中脊所表現的地球體積膨脹階段
A—岩漿外逸量持續增大階段;B—岩漿外逸量持續減小階段
當裂谷中開始出現大量外逸的岩漿時,表明地球內部物質的體積增大速度大於地殼膨脹速度,地球的整體膨脹開始向新的動態發展。當膨脹力持續作用,內部物質體積膨脹量越來越大,由於地殼的重載使岩漿的外逸量越來越大,形成了從裂谷最初的外逸岩漿之處向洋中脊方向越來越凸出的地形特徵(見圖4-5)。
2.4岩漿外逸量持續減小階段
岩漿外逸量持續減小直至為零的作用階段是指岩漿外逸量突然急劇下降開始到岩漿停止持續流出為止(見圖4-10)。
顯然,圖面顯示出這一階段在洋脊變化曲線上為非對稱性,是可以理解的,岩漿的外逸從第三階段到第四階段,從一種動態平衡狀態向另一種狀態過渡,由於膨脹的增量出現減小,而地球各個圈層向外膨脹的邊界條件(包括地殼板塊的鬆散環境)、岩漿外逸口的大小等並沒有發生改變,所以會出現各種對稱與非對稱的洋脊形態。
從時間上講,圖4-10中的A、B兩階段是不相等的;從膨脹的改變數來講,A、B兩階段也是不相同的。圖中距離長短的不一是因為B階段為膨脹力作用的後期,地球盡管還在膨脹,但膨脹增量越來越小,經過了A階段持續加大過程,這時,地球的持續減小的膨脹增量主要體現在地球半徑的膨脹上,由於B階段地球整體膨脹已經足以完成因膨脹力作用而產生的地球體積的改變數,所以,岩漿的外逸量越來越少,而A階段則是因地球整體膨脹速度不足以平衡體積改變數。
2.5地球收縮階段
地球結束了膨脹力作用,變成完全受收縮力作用的階段,在此階段,地球的半徑持續變小。
3.關於地球的膨脹造山問題
如果說膨脹時期的地球也能造山的話,無疑這山是指洋中脊(也稱海隆)了。地史上曾經出現過一種地球膨脹造山的說法,即馬欽斯基(M.Matschinski,1953)所提出的觀點。他是在地球膨脹說的氛圍里提出的,其目的只是為了解釋地球在膨脹時可以造山,盡管存在很多疑問,但這一觀點卻無疑給人一種新的思路。他認為,地球膨脹時由於膨脹速率不同,出現地幔膨脹後的曲率與地殼膨脹後的曲率不同而形成地殼的懸空,在重力作用下,板塊的中部出現了推覆造山作用。馬欽斯基的膨脹造山模式給人啟發是:地球在膨脹時是有可能在局部地區發生造山作用的,如地球在潮汐力作用下,發生局部膨脹,當這種潮汐波傳播走後,即可形成馬欽斯基所描述的情形。當然,由潮汐力引起的局部膨脹在地球發生收縮運動時也可以產生。
以上論證了地球膨脹的有關參數計算問題,並進行了相關階段的劃分,採用的是一套歸納思維方法,主要根據已有的證據來求取變化參數,屬於後驗性,對預測幫助較小。後面還將提出一套根據地球所在軌道位置計算預測以後不同時間段內將要發生的變化及變化量的理論演算法。
❼ 如何進行數字圖像處理中的膨脹和腐蝕計算
腐蝕的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為1,結果圖像的該像素為1。否則為0。
結果:使二值圖像減小一圈
定義:E = B S = { x,y | SxyB}
膨脹的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為0,結果圖像的該像素為0。否則為1
結果:使二值圖像擴大一圈
定義:E = B S = { x,y | Sxy∩B ≠Ф}
膨脹源碼
BOOL Dilation(HWND hWnd,BOOL Hori)
{
DWORD OffBits,BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;
//為了處理的方便,仍採用256級灰度圖,不過只調色板中0和255兩項
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",
"Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize為緩沖區大小
BufSize=OffBits+bi.biHeight*LineBytes;
//為新的緩沖區分配內存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//拷貝頭信息和點陣圖數據
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
//在水平方向進行膨脹運算
for(y=0;y<bi.biHeight;y++){
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;
lpTempPtr=(char*)lpTempImgData+
(BufSize-LineBytes-y*LineBytes)+1;
for(x=1;x<bi.biWidth-1;x++){
//注意為防止越界,x的范圍從1到寬度-2
num=(unsigned char)*lpPtr;
//原圖中是黑點的,新圖中肯定也是,所以要考慮的是那些原圖
//中的白點,看是否有可能膨脹成黑點
if (num==255){
*lpTempPtr=(unsigned char)255; //先置成白點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+i-1);
//只要左右鄰居中有一個是黑點,就膨脹成黑點
if(num==0){
*lpTempPtr=(unsigned char)0;
break;
}
}
}
//原圖中就是黑點的,新圖中仍是黑點
else *lpTempPtr=(unsigned char)0;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
else{
//在垂直方向進行腐蝕運算
for(y=1;y<bi.biHeight-1;y++){ //注意為防止越界,y的范圍從1到高度-2
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<bi.biWidth;x++){
num=(unsigned char)*lpPtr;
if (num==255){
*lpTempPtr=(unsigned char)255;
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+(i-1)*LineBytes);
//只要上下鄰居中有一個是黑點,就膨脹成黑點
if(num==0){
*lpTempPtr=(unsigned char)0;
break;
}
}
}
else *lpTempPtr=(unsigned char)0;
lpPtr++;
lpTempPtr++;
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//產生新的點陣圖
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,
(LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData,
DIB_RGB_COLORS);
//起不同的結果文件名
if(Hori)
hf=_lcreat("c:\\hdilation.bmp",0);
else
hf=_lcreat("c:\\vdilation.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//釋放內存及資源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
腐蝕源碼
BOOL Erosion(HWND hWnd,BOOL Hori)
{
DWORD OffBits,BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;
//為了處理方便,仍採用256級灰度圖,不過只用調色板中0和255兩項
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",
"Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize為緩沖區大小
BufSize=OffBits+bi.biHeight*LineBytes;
//為新的緩沖區分配內存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//拷貝頭信息和點陣圖數據
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
//在水平方向進行腐蝕運算
for(y=0;y<bi.biHeight;y++){
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;
lpTempPtr=(char*)lpTempImgData+
(BufSize-LineBytes-y*LineBytes)+1;
for(x=1;x<bi.biWidth-1;x++){
//注意為防止越界,x的范圍從1到寬度-2
num=(unsigned char)*lpPtr;
if (num==0){ //因為腐蝕掉的是黑點,所以只對黑點處理
*lpTempPtr=(unsigned char)0; //先置成黑點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+i-1);
if(num==255){
//自身及上下鄰居中若有一個不是黑點,則將該點腐
//蝕成白點
*lpTempPtr=(unsigned char)255;
break;
}
}
}
//原圖中就是白點的,新圖中仍是白點
else *lpTempPtr=(unsigned char)255;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
else{
//在垂直方向進行腐蝕運算
for(y=1;y<bi.biHeight-1;y++){ //注意為防止越界,y的范圍從1到高度-2
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<bi.biWidth;x++){
num=(unsigned char)*lpPtr;
if (num==0){ //因為腐蝕掉的是黑點,所以只對黑點處理
*lpTempPtr=(unsigned char)0; //先置成黑點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+(i-1)*LineBytes);
if(num==255){
//自身及上下鄰居中若有一個不是黑點,則將該點腐
//蝕成白點
*lpTempPtr=(unsigned char)255;
break;
}
}
}
//原圖中就是白點的,新圖中仍是白點
else *lpTempPtr=(unsigned char)255;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//產生新的點陣圖
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,
(LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);
//起不同的結果文件名
if(Hori)
hf=_lcreat("c:\\herosion.bmp",0);
else
hf=_lcreat("c:\\verosion.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//釋放內存及資源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
❽ 如何計算通貨膨脹率
通貨膨脹,是一種貨幣現象,指貨幣發行量超過流通中實際所需要的貨幣量而引起的貨幣貶值現象。通貨膨脹與物價上漲是不同的經濟范疇,但兩者又有一定的聯系,通貨膨脹最為直接的結果就是物價上漲。
通貨膨脹率(Infation Rate)是貨幣超發部分與實際需要的貨幣量之比,用以反映通貨膨脹、貨幣貶值的程度;而價格指數則是反映價格變動趨勢和程度的相對數。
經濟學上,通貨膨脹率為:物價平均水平的上升幅度(以通貨膨脹為准)。以氣球來類比,若其體積大小為物價水平,則通貨膨脹率為氣球膨脹速度。或說,通貨膨脹率為貨幣購買力的下降速度。
在實際中,一般不直接、也不可能計算通貨膨脹,而是通過價格指數的增長率來間接表示。由於消費者價格是反映商品經過流通各環節形成的最終價格,它最全面地反映了商品流通對貨幣的需要量,因此,消費者價格指數是最能充分、全面反映通貨膨脹率的價格指數。目前,世界各國基本上均用消費者價格指數(我國稱居民消費價格指數),也即CPI來反映通貨膨脹的程度。
通貨膨脹率計算公式
通貨膨脹率=(現期物價水平—基期物價水平)/基期物價水平
其中基期就是選定某年的物價水平作為一個參照,這樣就可以把其他各期的物價水平通過與基期水平作一對比,從而衡量現今的通貨膨脹水平。其實,上面所說的只是三種衡量通貨膨脹水平方法之一的消費指數折演算法,但它是最常用的,此外還有GDP折演算法和生產指數折演算法。
在國家統計局網站可以了解到通貨膨脹率。
❾ 通貨膨脹率計算公式
以(t-1)時期的CPI指數為基期,
找到t時期的CPI指數
t時期通貨膨脹率=【t時期的CPI 指數-(t-1)時期 的CPI指數】/(t-1時期的CPI指數)*100%
例如:t時期的CPI 指數為10%,(t-1)時期 的CPI指數為5%,則t時期通貨膨脹率=(10%-5%)/5%*100%,即t時期通貨膨脹率為2%。
採納哦謝謝
❿ 數字圖像處理 膨脹和腐蝕演算法的實現
腐蝕的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為1,結果圖像的該像素為1。否則為0。
結果:使二值圖像減小一圈
定義:E = B S = { x,y | SxyB}
膨脹的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為0,結果圖像的該像素為0。否則為1
結果:使二值圖像擴大一圈
定義:E = B S = { x,y | Sxy∩B ≠Ф}