當前位置:首頁 » 操作系統 » 數字圖像處理典型演算法及實現

數字圖像處理典型演算法及實現

發布時間: 2023-06-16 08:21:42

① 數字圖像處理的基本演算法及要解決的主要問題

圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。目前大多數的圖像是以數字形式存儲,因而圖像處理很多情況下指數字圖像處理。此外,基於光學理論的處理方法依然佔有重要的地位。

圖像處理是信號處理的子類,另外與計算機科學、人工智慧等領域也有密切的關系。

傳統的一維信號處理的方法和概念很多仍然可以直接應用在圖像處理上,比如降噪、量化等。然而,圖像屬於二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。
目錄
[隱藏]

* 1 解決方案
* 2 常用的信號處理技術
o 2.1 從一維信號處理擴展來的技術和概念
o 2.2 專用於二維(或更高維)的技術和概念
* 3 典型問題
* 4 應用
* 5 相關相近領域
* 6 參見

[編輯] 解決方案

幾十年前,圖像處理大多數由光學設備在模擬模式下進行。由於這些光學方法本身所具有的並行特性,至今他們仍然在很多應用領域佔有核心地位,例如 全息攝影。但是由於計算機速度的大幅度提高,這些技術正在迅速的被數字圖像處理方法所替代。

從通常意義上講,數字圖像處理技術更加普適、可靠和准確。比起模擬方法,它們也更容易實現。專用的硬體被用於數字圖像處理,例如,基於流水線的計算機體系結構在這方面取得了巨大的商業成功。今天,硬體解決方案被廣泛的用於視頻處理系統,但商業化的圖像處理任務基本上仍以軟體形式實現,運行在通用個人電腦上。

[編輯] 常用的信號處理技術

大多數用於一維信號處理的概念都有其在二維圖像信號領域的延伸,它們中的一部分在二維情形下變得十分復雜。同時圖像處理也具有自身一些新的概念,例如,連通性、旋轉不變性,等等。這些概念僅對二維或更高維的情況下才有非平凡的意義。

圖像處理中常用到快速傅立葉變換,因為它可以減小數據處理量和處理時間。

[編輯] 從一維信號處理擴展來的技術和概念

* 解析度(Image resolution|Resolution)
* 動態范圍(Dynamic range)
* 帶寬(Bandwidth)
* 濾波器設計(Filter (signal processing)|Filtering)
* 微分運算元(Differential operators)
* 邊緣檢測(Edge detection)
* Domain molation
* 降噪(Noise rection)

[編輯] 專用於二維(或更高維)的技術和概念

* 連通性(Connectedness|Connectivity)
* 旋轉不變性(Rotational invariance)

[編輯] 典型問題

* 幾何變換(geometric transformations):包括放大、縮小、旋轉等。
* 顏色處理(color):顏色空間的轉化、亮度以及對比度的調節、顏色修正等。
* 圖像合成(image composite):多個圖像的加、減、組合、拼接。
* 降噪(image denoising):研究各種針對二維圖像的去噪濾波器或者信號處理技術。
* 邊緣檢測(edge detection):進行邊緣或者其他局部特徵提取。
* 分割(image segmentation):依據不同標准,把二維圖像分割成不同區域。
* 圖像製作(image editing):和計算機圖形學有一定交叉。
* 圖像配准(image registration):比較或集成不同條件下獲取的圖像。
* 圖像增強(image enhancement):
* 圖像數字水印(image watermarking):研究圖像域的數據隱藏、加密、或認證。
* 圖像壓縮(image compression):研究圖像壓縮。

[編輯] 應用

* 攝影及印刷 (Photography and printing)
* 衛星圖像處理 (Satellite image processing)
* 醫學圖像處理 (Medical image processing)
* 面孔識別, 特徵識別 (Face detection, feature detection, face identification)
* 顯微圖像處理 (Microscope image processing)
* 汽車障礙識別 (Car barrier detection)

[編輯] 相關相近領域

* 分類(Classification)
* 特徵提取(Feature extraction)
* 模式識別(Pattern recognition)
* 投影(Projection)
* 多尺度信號分析(Multi-scale signal analysis)
* 離散餘弦變換(The Discrete Cosine Transform)

② 二、數字圖像處理基本運算

        點運算具有如下特點:1)點運算針對圖像中的每一個像素灰度,獨立地進行灰度值的改變;2)輸出圖像中每個像素點的灰度值,僅取決於相應輸入像素點的值;3)點運算不改變圖像內的空間關系;4)從像素到像素的操作;5)點運算可完全由灰度變換函數或灰度映射表確定。

        具體一點,對於一整張圖像來說:

其中,對於a和b,有以下特碰鄭嘩點:

        這種運算意思很明了,就是一對一映射。實際上,上述的線性和非線性點運算到最後也可以看成是映射表點運算。

        加法運算的定義:

主要應用有去除「疊加性」噪音、生成圖像疊加效果等。

        1)去除「疊加性」噪音。對於原圖像f(x,y),有一個噪音圖像集: ,其中: ,M個圖像的均值定義為: ,當噪音 為互不相關,且均值為0時,上述圖像均值(即 )將降低噪音的影響。通過這個事實,可以得出一個定理:對M幅加性雜訊圖像進行平均,可以使圖像的平方信噪比提高M倍。

        2)生成圖像疊加效果。對於兩個圖像f(x,y)和h(x,y)的均值有: ,這樣會得到二次曝光的效果。推廣這個公式為: 。我們可以得到各種圖像合成的效果,也可以用於兩張圖片的銜接。

        減法的定義:

主要應用有去除不需要的疊加性圖案、檢測同一場景兩幅圖像之間的變化等。

        1)去除不需要的疊加性圖案。設:背景圖像b(x,y),前景背景混合圖像f(x,y)。則 ,g(x,y)為去除了背景的圖像。電視製作的藍屏技術就基於此:

        2)檢測同一場景兩幅圖像之間的變化。設:時間1的圖像為 ,時間2的圖像為 。則

        乘法的定義:

主要應用有圖形的局部顯示等。

        求反的定義:

其中R為f(x,y)的灰度級。主要應用有獲得一個圖像的負像、獲得一個子圖像的補圖像叢蠢等。

        異或運算的定義:

主要應用有獲得相交子圖像等。

        與運算的定義:

主要應用有求兩個子圖像的相交子圖等。

        在圖像空間,對圖像的形狀、像素值等進行變化、映射等處理。

        即改變圖像的形狀。主要有基本變換和灰度插值。

        幾何變換的基本概念:對原始圖像,按照需要改變其大小、形狀和位置的變化。

        變換的類型:二維平面圖像的幾何變換、三維圖像的幾何變換、由三維向二維平面的投影變換等。

        定義:對於原始圖像f(x,y),坐標變換函數

唯一確定了幾何變換:

        二維圖像幾何變換的基本方式有多項式變換、透視變換等。

        1)多項式變換。基本公式:

線性變換——多項式變換中的一階變換:

使用多項式變換實現二維圖像的幾何變換即由線性變換確定的圖像的平移、縮放、旋轉、鏡像與錯切。

        2)二維數字圖像基本幾何變換的矩陣計算。

   笑行     原始圖像與目標圖像之間的坐標變換函數為線性函數,這可以通過與之對應的線性矩陣變換來實現。

        齊次坐標表示法——用n+1維向量表示n維向量。設有變換矩陣T,則二維圖像的基本幾何變換矩陣為:

        二維圖像的基本幾何變換具有特徵:1)變換前圖形上的每一點,在變換後的圖形上都有一確定的對應點,如原來直線上的中點變換為新直線的中點;2)平行直線變換後仍保持平行,相交直線變換後仍相交;3)變換前直線上的線段比等於變換後對應的線段比。

        變換矩陣T可以分解為2個子矩陣,子矩陣1: ,可實現恆等、比例、鏡像、旋轉和錯切變換;子矩陣2: ,可實現圖像的平移變換(e=0,f=0時無平移作用)。

        a)平移變換(只改變圖像位置,不改變圖像的大小和形狀)。設:

可有: 。

        b)水平鏡像。

        c)垂直鏡像。

        d)縮放變換:x方向縮放c倍,y方向縮放d倍

c,d相等,按比例縮放:

c,d不相等,不按比例縮放——幾何畸變:

        e)旋轉變換:繞原點旋轉 度。設:

        旋轉變換的注意點:

        i)圖像旋轉之前,為了避免信息的丟失,一定有平移坐標。具體有如下兩種方法:

        ii)圖像旋轉之後,會出現許多的空洞點,對這些空洞點必須進行填充處理,否則畫面效果不好。這種操作被稱之為插值處理。

        f)錯切變換:圖像的錯切變換實際上是景物在平面上的非垂直投影效果。

x方向的錯切:

y方向的錯切:

錯切之後,原圖像的像素排列方向改變。與旋轉不同的是,x方向與y方向獨立變化。

        g)偽仿射變換——雙線性幾何變換:

偽仿射變換有兩個特點:與xy平面上坐標軸平行的直線,變換為 平面上的直線;與xy平面上坐標軸不平行的直線,變換為 平面上的曲線。

        h)任意變形變換——非線性幾何變換。可以有以下兩種作用:在二維平面上,實現圖像幾何形狀的任意變換;在二維平面上,校正圖像的幾何失真。

        特徵:一般的,原始圖像與目標圖像之間,存在一一對應的特徵點(tiepoints,GCPs)。

        模型:一般的,原始圖像與目標圖像之間的坐標變換函數為非線性函數,需用高階多項式進行近似描述。例如,三階多項式變換:

        通過原始圖像與目標圖像之間多個對應特徵點(GCP點),可以確定上述多項式中的未知參數。

        多項式階數與GCP數量的關系:

        通過多項式變換進行任意變形變換後的誤差,通常用均方誤差表示:

        3)二維圖像的透視變換。將一個平面上的點 ,以投影中心O為基準,投影成另一個平面上的點 ;可看作為三維物體向二維圖像透視投影的特殊形式。

        透視投影:當人們站在玻璃窗內用一隻眼睛觀看室外的建築物時,無數條視線與玻璃窗相交,把各交點連接起來的圖形即為透視圖。

        透視投影相當於以人的眼睛為投影中心的中心投影,符合人們的視覺形象,富有較強的立體感和真實感。

        隨著觀看角度的變化,可看到物體的一個或多個側面;在透視處理上,按照空間直角坐標系的劃分,相應的分為單點透視投影、雙點透視投影和三點透視投影。

        二維圖像透視變換函數及其齊次坐標表示為:

與前面關於齊次變換矩陣的描述類似,這里引入第三個子矩陣 ,實現圖像的透視變換。變換式中共有8個獨立的參數,可採用圖像點對的方式(最少採用4對共8個點即可),進行二維平面圖像的透視投影計算。

總結基本幾何變換的特徵:

        1)坐標空間的變化:范圍發生變化;大小發生變化。

        2)像素值的變化:像素值不發生變化——位置改變;像素值發生變化——旋轉、縮放、變形變換。

        1)最近鄰插值法

        選擇最臨近點像素灰度值。如圖2.21中, 點像素的灰度值為原圖像中 點的像素值。

最近鄰插值法的特點有:a)簡單快速;b)灰度保真性好;c)誤差較大;d)視覺特性較差(容易造成馬賽克效應)。

        2)雙線性插值法(一階插值)

        如圖2.22中,有

最終, 由以上四個結果得出。

        雙線性插值可以有簡化的計算方法。如圖2.23中,即有,應用雙曲拋物面方程:

歸一化坐標值:

最終有:

雙曲拋物面的特點:a)計算中較為充分地考慮相鄰各點的特徵,具有灰度平滑過渡特點;b)一般情況下可得到滿意結果;c)具有低通濾波特性,使圖像輪廓模糊;d)平滑作用使圖像細節退化,尤其在放大時;e)不連續性會產生不希望的結果。

        3)最佳插值函數。在滿足Nyquist條件下,從離散信號 可恢復連續信號x(t):

        4)高階插值。如果簡化計算,僅取原點周圍有限范圍函數(如圖2.25所示);

並利用三次多項式來近似理論上的最佳插值函數sinc(x):

由此形成常用的三次卷積插值演算法,又稱三次內插法、兩次立方法(Cubic)、CC插值法等。

        三次卷積插值演算法特點:a)是滿足Nyquist下,最佳重構公式的近似;b)只有圖像滿足特定的條件,三次卷積插值演算法才能獲得最佳結果;c)可使待求點的灰度值更好地模擬實際可能值;d)可取得更好的視覺效果;e)三次卷積內插突出的優點是高頻信息損失少,可將雜訊平滑;f) 時,像元均值和標准差信息損失小;g)計算量大為增加。

        5)圖像處理中內插方法的選擇。內插方法的選擇除了考慮圖像的顯示要求及計算量,還要考慮內插結果對分析的影響。a)當紋理信息為主要信息時,最近鄰采樣將嚴重改變原圖像的紋理信息;b)當灰度信息為主要信息時,雙線性內插及三次卷積內插將減少圖像異質性,增加圖像同質性,其中,雙線性內插方法將使這種變化更為明顯。

        即改變圖像像素值。主要有模板運算、灰度變換和直方圖變換。

        定義:對於原圖像 ,灰度值變換函數 唯一確定了非幾何變換: , 是目標圖像。

        非幾何變換屬於像素值的變換——灰度變換,沒有幾何位置的改變。

        對於彩色原圖像 ,顏色值變換函數 唯一確定了非幾何變換:

        簡單變換——像素值一一對應的映射,如偽彩色變換;復雜變換——同時考慮相鄰各點的像素值,通常通過模板運算進行。        

        1)定義。所謂模板就是一個系數矩陣;模板大小:經常是奇數,如

③ 在圖像處理中有哪些演算法

1、圖像變換:

由於圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。採用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散餘弦變換等間接處理技術,將空間域的處理轉換為變換域處理,可減少計算量,獲得更有效的處理。它在圖像處理中也有著廣泛而有效的應用。

2、圖像編碼壓縮:

圖像編碼壓縮技術可減少描述圖像的數據量,以便節省圖像傳輸、處理時間和減少所佔用的存儲器容量。

壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。

編碼是壓縮技術中最重要的方法,它在圖像處理技術中是發展最早且比較成熟的技術。

3、圖像增強和復原:

圖像增強和復原的目的是為了提高圖像的質量,如去除雜訊,提高圖像的清晰度等。

圖像增強不考慮圖像降質的原因,突出圖像中所感興趣的部分。如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節明顯;如強化低頻分量可減少圖像中雜訊影響。

4、圖像分割:

圖像分割是數字圖像處理中的關鍵技術之一。

圖像分割是將圖像中有意義的特徵部分提取出來,其有意義的特徵有圖像中的邊緣、區域等,這是進一步進行圖像識別、分析和理解的基礎。

5、圖像描述:

圖像描述是圖像識別和理解的必要前提。

一般圖像的描述方法採用二維形狀描述,它有邊界描述和區域描述兩類方法。對於特殊的紋理圖像可採用二維紋理特徵描述。

6、圖像分類:

圖像分類屬於模式識別的范疇,其主要內容是圖像經過某些預處理(增強、復原、壓縮)後,進行圖像分割和特徵提取,從而進行判決分類。

圖像分類常採用經典的模式識別方法,有統計模式分類和句法模式分類。

(3)數字圖像處理典型演算法及實現擴展閱讀:

圖像處理主要應用在攝影及印刷、衛星圖像處理、醫學圖像處理、面孔識別、特徵識別、顯微圖像處理和汽車障礙識別等。

數字圖像處理技術源於20世紀20年代,當時通過海底電纜從英國倫敦到美國紐約傳輸了一幅照片,採用了數字壓縮技術。

數字圖像處理技術可以幫助人們更客觀、准確地認識世界,人的視覺系統可以幫助人類從外界獲取3/4以上的信息,而圖像、圖形又是所有視覺信息的載體,盡管人眼的鑒別力很高,可以識別上千種顏色,

但很多情況下,圖像對於人眼來說是模糊的甚至是不可見的,通過圖象增強技術,可以使模糊甚至不可見的圖像變得清晰明亮。

④ C#數字圖像處理演算法典型實例的目錄

第1章緒論
1.1數字圖像處理概述
1.2C#概述
1.2.1C#特點
1.2.2WinForm編程
1.2.3GDI+
1.3補充說明
第2章C#數字圖像處理的3種方法
2.1C#圖像處理基礎
2.1.1Bitmap類
2.1.2BitmapData類
2.1.3Graphics類
2.2彩色圖像灰度化
2.3彩色圖像灰度化編程實例
2.3.1使用圖像
2.3.2圖像處理的3種方法
2.4小結
第3章點運算及直方圖
3.1灰度直方圖
3.1.1灰度直方圖定義
3.1.2灰度直方圖編程實例
3.2線性點運算
3.2.1線性點運算定義
3.2.2線性點運算編程實例
3.3全等級直方圖灰度拉伸
3.3.1灰度拉伸定義
3.3.2灰度拉伸編程實例
3.4直方圖均衡化
3.4.1直方圖均衡化定義
3.4.2直方圖均衡化編程實例
3.5直方圖匹配
3.5.1直方圖匹配定義
3.5.2直方圖匹配編程實例
3.6小結
第4章幾何運算
4.1圖像平移
4.1.1圖像平移定義
4.1.2圖像平移編程實例
4.2圖像鏡像
4.2.1圖像鏡像變換定義
4.2.2圖像鏡像編程實現
4.3圖像縮放
4.3.1圖像縮放定義
4.3.2灰度插值法
4.3.3圖像縮放編程實例
4.4圖像旋轉
4.4.1圖像旋轉定義
4.4.2圖像旋轉編程實現
4.5小結
第5章數學形態學圖像處理
5.1圖像腐蝕運算
5.1.1圖像腐蝕運算定義
5.1.2圖像腐蝕運算編程實例
5.2圖像膨脹運算
5.2.1圖像膨脹運算定義
5.2.2圖像膨脹運算編程實例
5.3圖像開運算與閉運算
5.3.1圖像開運算與閉運算定義
5.3.2圖像開運算編程實例
5.3.3圖像閉運算編程實例
5.4擊中擊不中變換
5.4.1擊中擊不中變換定義
5.4.2擊中擊不中變換編程實例
5.5小結
第6章頻率變換
6.1二維離散傅里葉變換
6.2快速傅里葉變換
6.2.1快速傅里葉變換概述
6.2.2快速傅里葉變換編程實例
6.3幅度圖像和相點陣圖像
6.4頻率成分濾波
6.4.1頻率成分濾波原理
6.4.2頻率成分濾波編程實例
6.5頻率方位濾波
6.5.1頻率方位濾波原理
6.5.2頻率方位濾波編程實例
6.6小結
第7章圖像平滑與去噪
7.1雜訊模型
7.1.1雜訊概述
7.1.2雜訊模型編程實例
7.2均值濾波與中值濾波
7.2.1均值濾波與中值濾波原理
7.2.2均值濾波與中值濾波編程實例
7.3灰度形態學濾波
7.3.1灰度形態學原理
7.3.2灰度形態學去噪原理
7.3.3灰度形態學去噪編程實現
7.4小波變換去噪
7.4.1小波變換概述
7.4.2小波變換去噪原理
7.4.3小波變換去噪編程實例
7.5高斯低通濾波
7.5.1高斯低通濾波原理
7.5.2高斯低通濾波編程實例
7.6統計濾波
7.6.1統計濾波原理
7.6.2統計濾波編程實例
7.7小結
第8章邊緣檢測
8.1模板運算元法
8.1.1模板運算元法原理
8.1.2模板運算元法編程實例
8.2高斯運算元
8.2.1高斯運算元原理
8.2.2高斯運算元編程實例
8.3Canny運算元
8.3.1Canny邊緣檢測原理
8.3.2Canny運算元編程實例
8.4形態學邊緣檢測
8.4.1形態學邊緣檢測原理
8.4.2形態學邊緣檢測編程實例
8.5小波變換邊緣檢測
8.5.1小波變換邊緣檢測原理
8.5.2小波變換邊緣檢測編程實例
8.6金字塔方法
8.6.1金字塔方法原理
8.6.2金字塔方法編程實例
8.7小結
第9章圖像分割
9.1Hough變換
9.1.1Hough變換原理
9.1.2Hough變換編程實例
9.2閾值法
9.2.1自動閾值選擇法原理
9.2.2閾值分割法編程實例
9.3特徵空間聚類法
9.3.1K-均值聚類法原理
9.3.2ISODATA聚類法原理
9.3.3特徵空間聚類法編程實例
9.4鬆弛迭代法
9.4.1鬆弛迭代法原理
9.4.2鬆弛迭代法編程實例
9.5小結
第10章圖像壓縮編碼
10.1哈夫曼編碼
10.1.1哈夫曼編碼原理
10.1.2哈夫曼編碼編程實例
10.2香農編碼
10.2.1香農編碼原理
10.2.2香農編碼編程實例
10.3香農-弗諾編碼
10.3.1香農-弗諾編碼原理
10.3.2香農-弗諾編碼編程實例
10.4行程編碼
10.4.1行程編碼原理
10.4.2行程編碼編程實例
10.5LZW編碼
10.5.1LZW編碼原理
10.5.2LZW編碼編程實例
10.6預測編碼
10.6.1DPCM原理
10.6.2預測編碼編程實例
10.7傅里葉變換編碼
10.7.1傅里葉變換編碼原理
10.7.2傅里葉變換編碼編程實例
10.8小波變換編碼
10.8.1小波變換編碼原理
10.8.2小波變換編碼編程實例
10.9小結
第11章彩色圖像處理
11.1彩色空間
11.1.1RGB彩色空間和HSI彩色空間
11.1.2彩色空間轉換編程實例
11.1.3彩色空間分量調整編程實例
11.2偽彩色處理
11.2.1偽彩色處理原理
11.2.2偽彩色處理編程實例
11.3彩色圖像直方圖均衡化
11.3.1彩色圖像直方圖均衡化原理
11.3.2彩色圖像直方圖均衡化編程實例
11.4彩色圖像平滑處理
11.4.1彩色圖像平滑處理原理
11.4.2彩色圖像平滑處理編程實例
11.5彩色圖像銳化處理
11.5.1彩色圖像銳化處理原理
11.5.2彩色圖像銳化處理編程實例
11.6彩色圖像邊緣檢測
11.6.1彩色圖像邊緣檢測原理
11.6.2彩色圖像邊緣檢測編程實例
11.7彩色圖像分割
11.7.1彩色圖像分割原理
11.7.2彩色圖像分割編程實例
11.8小結

⑤ 求推薦圖像處理演算法方面的經典書籍

個人認為,真正的經典推薦清華大學出版社的《圖像處理、分析與機器視覺》,這本書由淺入深。數字圖像處理這本書很經典,但只能算是入門,講的更多是圖像處理的演算法和基本理論。而《圖像處理、分析與機器視覺》這本書涵蓋了圖像處理演算法、分析和實際的應用。圖像處理說白了是為了圖像特徵提取和分析,然後再到圖像識別等更高級的後續過程。國內大部分圖像處理演算法崗位其實更多是偏向應用方面,所以這本書能讓你對圖像處理行業整個情況更加了解,實用性更強!順便附上電子版,看對你有沒有幫助。h(去掉)ttps://p(去掉)an..com/s/184hg6h1(去掉)ST2Fqijr4FFFuRg 提取:qfid

⑥ 數字圖像處理 圖像縮放以及旋轉的演算法代碼

clearall;
I=imread('lena.bmp');
figure;imshow(I);title('原圖像');
[m,n]=size(I);

%%%縮小臨近法
M=0.5;%放大倍數

%新的圖像大小
m1=m*M;n1=n*M;
%****************************************************
fori=1:m1
forj=1:n1;
J(i,j)=I(round(i/M),round(j/M));
end
end
%*****************************************************
figure;imshow(J);title('縮小圖像');

%%%放大雙線性插值法
I2=double(I);
N=1.5;%放大倍數
%新的圖像大小
m2=m*N;n2=n*N;
J2=zeros(m2,n2);
fori=1:m2
forj=1:n2
x=i/N;
y=j/N;
u=floor(x);
v=floor(y);
a=x-u;
b=y-v;
ifu+2<=m&v+2<=n
J2(i,j)=I2(u+1,v+1)*(1-a)*(1-b)+I2(u+2,v+1)*a*(1-b)+I2(u+1,v+2)*(1-a)*b+I2(u+2,v+2)*a*b;
end
end
end
J2=uint8(J2);
figure;imshow(J2);title('放大圖像');

%%%%%旋轉
R=45*pi/180;%旋轉角度
I=double(I);
%新圖像大小
m2=ceil(m*cos(R)+n*sin(R));
n2=ceil(m*sin(R)+n*cos(R));

u0=m*sin(R);%平移量

%變換矩陣
T=[cos(R),sin(R);-sin(R),cos(R)];
L=zeros(m2,n2);
foru=1:n2
forv=1:m2
%新圖像坐標變換到原圖像坐標x和y中
temp=T*([u;v]-[u0;0]);
x=temp(1);
y=temp(2);
ifx>=1&x<=m&y>=1&y<=n%若變換出的x和y在原圖像范圍內
x_low=floor(x);
x_up=ceil(x);
y_low=floor(y);
y_up=ceil(y);

%雙線性插值,p1到p4是(x,y)周圍的四個點
p1=I(x_low,y_low);
p2=I(x_up,y_low);
p3=I(x_low,y_low);
p4=I(x_up,y_up);
s=x-x_low;
t=y-y_low;
L(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
end
end
L=uint8(L);
figure;imshow(L);

⑦ 數字圖像處理及算術編碼(或DCT壓縮編碼)模擬實現

1)數字圖像的變換:普通傅里葉變換(ft)與逆變換(ift)、快速傅里葉變換(fft)與逆變換(ifft)、離散餘弦變換(DCT),小波變換。
2) 數字圖像直方圖的統計及繪制等;
clc;
Y=imread('C:\zheng.jpg');
length(size(Y))==3
s=rgb2gray(Y);
imshow(Y);
title('原圖'); %figure1
Y=rgb2gray(Y);
figure;imshow(Y);title('原始圖像'); % figue2
[J,T] = histeq(Y);
figure;imshow(J);title('增強圖像'); % figue3
figure ;imhist(Y,64);title('原始圖像直方圖'); % figue4
figure ;imhist(J,64);title('均衡化圖像直方圖');% figue5
clear all;
Y=imread('C:\zheng.jpg');%導入圖片%傅里葉變換
Y=rgb2gray(Y);
figure(1);
imshow(Y);
title('灰度化後的圖像');
Y1=fftshift(fft2(Y));
figure(2);
Y2=abs(Y1);
imshow(Y2,[]);
title('傅里葉變換的圖像');
figure(3);
Y2=abs(ifft2(Y1))/255;
imshow(Y2);
title('傅里葉逆變換的圖像');
J=fft2(double(s));%快速傅里葉變換
K=fftshift(fft2(double(s)));
F=ifft2(K);%快速傅里葉變換
figure; %figure6
imshow(J);
title('FFT變換結果');
figure; %figure7
imshow(log(abs(K)+1),[]);
title('零點平移');
figure; %figure8
imshow(abs(F),[]);
title('IFFT變換結果');
% 圖象的DCT變換
RGB=imread('C:\zheng.jpg');
figure;%figure9
subplot(1,2,1)
imshow(RGB);
title('彩色原圖');
a=rgb2gray(RGB);
subplot(1,2,2)
imshow(a);
title('灰度圖');
figure;%figure10
b=dct2(a);
imshow(log(abs(b)),[]),colormap(jet(64)),colorbar;
title('DCT變換結果');
figure;%figure11
b(abs(b)<10)=0;
% idct
c=idct2(b)/255;
imshow(c);
title('IDCT變換結果')
小波變換
clear
I= imread('C:\zheng.jpg');
X=rgb2gray(I);
subplot (121) ;
imshow(X);
title ('原始圖像') ;%畫出原圖像
[c,s] =wavedec2 (X, 2, 'sym4') ;
%進行二層小波分解
len = length ( c) ;%處理分解系數,突出輪廓,弱化細節
for I = 1: len
if (c( I )>350)
c( I ) = 2*c (I ) ;
else
c( I ) = 0.5*c( I ) ;
end
end
nx =waverec2 ( c, s, 'sym4') ;
%分解系數重構
subplot(122) ;
image( nx) ;
title('增強圖像')
%畫出增強圖像

java數字圖像處理常用演算法


前些時候做畢業設計 用java做的數字圖像處理方面的東西 這方面的資料ms比較少 發點東西上來大家共享一下 主要就是些演算法 有自己寫的 有人家的 還有改人家的 有的演算法寫的不好 大家不要見笑

一 讀取bmp圖片數據

// 獲取待檢測圖像 數據保存在數組 nData[] nB[] nG[] nR[]中

public void getBMPImage(String source) throws Exception { clearNData(); //清除數據保存區 FileInputStream fs = null; try { fs = new FileInputStream(source); int bfLen = ; byte bf[] = new byte[bfLen]; fs read(bf bfLen); // 讀取 位元組BMP文件頭 int biLen = ; byte bi[] = new byte[biLen]; fs read(bi biLen); // 讀取 位元組BMP信息頭

// 源圖寬度 nWidth = (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (int) bi[ ] & xff;

// 源圖高度 nHeight = (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (int) bi[ ] & xff;

// 位數 nBitCount = (((int) bi[ ] & xff) << ) | (int) bi[ ] & xff;

// 源圖大小 int nSizeImage = (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (((int) bi[ ] & xff) << ) | (int) bi[ ] & xff;

// 對 位BMP進行解析 if (nBitCount == ){ int nPad = (nSizeImage / nHeight) nWidth * ; nData = new int[nHeight * nWidth]; nB=new int[nHeight * nWidth]; nR=new int[nHeight * nWidth]; nG=new int[nHeight * nWidth];鍵帶 byte bRGB[] = new byte[(nWidth + nPad) * * nHeight]; fs read(bRGB (nWidth + nPad) * * nHeight); int nIndex = ; for (int j = ; j < nHeight; j++){ for (int i = ; i < nWidth; i++) { nData[nWidth * (nHeight j ) + i] = ( & xff) << | (((int) bRGB[nIndex + ] & xff) << ) | (((int) bRGB[nIndex + ] & xff) << ) | (int) bRGB[nIndex] & xff; nB[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex]& xff; nG[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex+ ]& xff; nR[nWidth * (nHeight j ) + i]=(int) bRGB[nIndex+ ]& xff;稿物蘆 nIndex += ; } nIndex += nPad; }// Toolkit kit = Toolkit getDefaultToolkit();// image = kit createImage(new MemoryImageSource(nWidth nHeight // nData nWidth));

/*螞冊 //調試數據的讀取

FileWriter fw = new FileWriter( C:\Documents and Settings\Administrator\My Documents\nDataRaw txt );//創建新文件 PrintWriter out = new PrintWriter(fw); for(int j= ;j<nHeight;j++){ for(int i= ;i<nWidth;i++){ out print(( * +nData[nWidth * (nHeight j ) + i])+ _ +nR[nWidth * (nHeight j ) + i]+ _ +nG[nWidth * (nHeight j ) + i]+ _ +nB[nWidth * (nHeight j ) + i]+ ); } out println( ); } out close();*/ } } catch (Exception e) { e printStackTrace(); throw new Exception(e); } finally { if (fs != null) { fs close(); } } // return image; }

二由r g b 獲取灰度數組

public int[] getBrightnessData(int rData[] int gData[] int bData[]){ int brightnessData[]=new int[rData length]; if(rData length!=gData length || rData length!=bData length || bData length!=gData length){ return brightnessData; } else { for(int i= ;i<bData length;i++){ double temp= *rData[i]+ *gData[i]+ *bData[i]; brightnessData[i]=(int)(temp)+((temp (int)(temp))> ? : ); } return brightnessData; } }

三 直方圖均衡化

public int [] equilibrateGray(int[] PixelsGray int width int height) { int gray; int length=PixelsGray length; int FrequenceGray[]=new int[length]; int SumGray[]=new int[ ]; int ImageDestination[]=new int[length]; for(int i = ; i <length ;i++) { gray=PixelsGray[i]; FrequenceGray[gray]++; } // 灰度均衡化 SumGray[ ]=FrequenceGray[ ]; for(int i= ;i< ;i++){ SumGray[i]=SumGray[i ]+FrequenceGray[i]; } for(int i= ;i< ;i++) { SumGray[i]=(int)(SumGray[i]* /length); } for(int i= ;i<height;i++) { for(int j= ;j<width;j++) { int k=i*width+j; ImageDestination[k]= xFF | ((SumGray[PixelsGray[k]]<< ) | (SumGray[PixelsGray[k]]<< ) | SumGray[PixelsGray[k]]); } } return ImageDestination; }

四 laplace 階濾波 增強邊緣 圖像銳化

public int[] laplace DFileter(int []data int width int height){ int filterData[]=new int[data length]; int min= ; int max= ; for(int i= ;i<height;i++){ for(int j= ;j<width;j++){ if(i== || i==height || j== || j==width ) filterData[i*width+j]=data[i*width+j]; else filterData[i*width+j]= *data[i*width+j] data[i*width+j ] data[i*width+j+ ] data[(i )*width+j] data[(i )*width+j ] data[(i )*width+j+ ] data[(i+ )*width+j] data[(i+ )*width+j ] data[(i+ )*width+j+ ]; if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } }// System out println( max: +max);// System out println( min: +min); for(int i= ;i<width*height;i++){ filterData[i]=(filterData[i] min)* /(max min); } return filterData; }

五 laplace 階增強濾波 增強邊緣 增強系數delt

public int[] laplaceHigh DFileter(int []data int width int height double delt){ int filterData[]=new int[data length]; int min= ; int max= ; for(int i= ;i<height;i++){ for(int j= ;j<width;j++){ if(i== || i==height || j== || j==width ) filterData[i*width+j]=(int)(( +delt)*data[i*width+j]); else filterData[i*width+j]=(int)(( +delt)*data[i*width+j] data[i*width+j ]) data[i*width+j+ ] data[(i )*width+j] data[(i )*width+j ] data[(i )*width+j+ ] data[(i+ )*width+j] data[(i+ )*width+j ] data[(i+ )*width+j+ ]; if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } for(int i= ;i<width*height;i++){ filterData[i]=(filterData[i] min)* /(max min); } return filterData; } 六 局部閾值處理 值化

// 局部閾值處理 值化 niblack s method /*原理 T(x y)=m(x y) + k*s(x y) 取一個寬度為w的矩形框 (x y)為這個框的中心 統計框內數據 T(x y)為閾值 m(x y)為均值 s(x y)為均方差 k為參數(推薦 )計算出t再對(x y)進行切割 / 這個演算法的優點是 速度快 效果好 缺點是 niblack s method會產生一定的雜訊 */ public int[] localThresholdProcess(int []data int width int height int w int h double coefficients double gate){ int[] processData=new int[data length]; for(int i= ;i<data length;i++){ processData[i]= ; } if(data length!=width*height) return processData; int wNum=width/w; int hNum=height/h; int delt[]=new int[w*h]; //System out println( w; +w+ h: +h+ wNum: +wNum+ hNum: +hNum); for(int j= ;j<hNum;j++){ for(int i= ;i<wNum;i++){ //for(int j= ;j< ;j++){ //for(int i= ;i< ;i++){ for(int n= ;n<h;n++) for(int k= ;k<w;k++){ delt[n*w+k]=data[(j*h+n)*width+i*w+k]; //System out print( delt[ +(n*w+k)+ ]: +delt[n*w+k]+ ); } //System out println(); /* for(int n= ;n<h;n++) for(int k= ;k<w;k++){ System out print( data[ +((j*h+n)*width+i*w+k)+ ]: +data[(j*h+n)*width+i*w+k]+ ); } System out println(); */ delt=thresholdProcess(delt w h coefficients gate); for(int n= ;n<h;n++) for(int k= ;k<w;k++){ processData[(j*h+n)*width+i*w+k]=delt[n*w+k]; // System out print( delt[ +(n*w+k)+ ]: +delt[n*w+k]+ ); } //System out println(); /* for(int n= ;n<h;n++) for(int k= ;k<w;k++){ System out print( processData[ +((j*h+n)*width+i*w+k)+ ]: +processData[(j*h+n)*width+i*w+k]+ ); } System out println(); */ } } return processData; }

七 全局閾值處理 值化

public int[] thresholdProcess(int []data int width int height double coefficients double gate){ int [] processData=new int[data length]; if(data length!=width*height) return processData; else{ double sum= ; double average= ; double variance= ; double threshold; if( gate!= ){ threshold=gate; } else{ for(int i= ;i<width*height;i++){ sum+=data[i]; } average=sum/(width*height); for(int i= ;i<width*height;i++){ variance+=(data[i] average)*(data[i] average); } variance=Math sqrt(variance); threshold=average coefficients*variance; } for(int i= ;i<width*height;i++){ if(data[i]>threshold) processData[i]= ; else processData[i]= ; } return processData; } }

八 垂直邊緣檢測 sobel運算元

public int[] verticleEdgeCheck(int []data int width int height int sobelCoefficients) throws Exception{ int filterData[]=new int[data length]; int min= ; int max= ; if(data length!=width*height) return filterData; try{ for(int i= ;i<height;i++){ for(int j= ;j<width;j++){ if(i== || i== || i==height || i==height ||j== || j== || j==width || j==width ){ filterData[i*width+j]=data[i*width+j]; } else{ double average; //中心的九個像素點 //average=data[i*width+j] Math sqrt( )*data[i*width+j ]+Math sqrt( )*data[i*width+j+ ] average=data[i*width+j] sobelCoefficients*data[i*width+j ]+sobelCoefficients*data[i*width+j+ ] data[(i )*width+j ]+data[(i )*width+j+ ] data[(i+ )*width+j ]+data[(i+ )*width+j+ ]; filterData[i*width+j]=(int)(average); } if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } for(int i= ;i<width*height;i++){ filterData[i]=(filterData[i] min)* /(max min); } } catch (Exception e) { e printStackTrace(); throw new Exception(e); } return filterData; }

九 圖像平滑 * 掩模處理(平均處理) 降低雜訊

lishixin/Article/program/Java/hx/201311/26286

⑨ 數字圖像處理的主要方法

數字圖像處理的工具可分為三大類:

第一類包括各種正交變換和圖像濾波等方法,其共同點是將圖像變換到其它域(如頻域)中進行處理(如濾波)後,再變換到原來的空間(域)中。

第二類方法是直接在空間域中處理圖像,它包括各種統計方法、微分方法及其它數學方法。

第三類是數學形態學運算,它不同於常用的頻域和空域的方法,是建立在積分幾何和隨機集合論的基礎上的運算。

由於被處理圖像的數據量非常大且許多運算在本質上是並行的,所以圖像並行處理結構和圖像並行處理演算法也是圖像處理中的主要研究方向。

(9)數字圖像處理典型演算法及實現擴展閱讀

1、數字圖像處理包括內容:

圖像數字化;圖像變換;圖像增強;圖像恢復;圖像壓縮編碼;圖像分割;圖像分析與描述;圖像的識別分類。

2、數字圖像處理系統包括部分:

輸入(採集);存儲;輸出(顯示);通信;圖像處理與分析。

3、應用

圖像是人類獲取和交換信息的主要來源,因 此,圖像處理的應用領域必然涉及到人類生活和工作的方方面面。隨著人類活動范圍的不斷擴大,圖像處理的應用領域也將隨之不斷擴大。

主要應用於航天和航空、生物醫學工程、通信 工程、工業和工程、軍事公安、文化藝術、機器人視覺、視頻和多媒體系統、科學可視化、電子商務等方面。

熱點內容
python的total 發布:2025-03-23 08:35:08 瀏覽:473
linux個shell 發布:2025-03-23 08:26:02 瀏覽:680
oraclelinux監聽配置 發布:2025-03-23 08:07:48 瀏覽:966
鎖頻密碼忘了怎麼辦 發布:2025-03-23 08:05:30 瀏覽:739
如何查詢公會伺服器 發布:2025-03-23 07:50:24 瀏覽:768
老電腦卡頓如何升級配置 發布:2025-03-23 07:48:08 瀏覽:979
伺服器tnt禁了怎麼炸區塊 發布:2025-03-23 07:43:48 瀏覽:687
線上兒童編程哪家好 發布:2025-03-23 07:43:42 瀏覽:923
如何配置多肉的圖片 發布:2025-03-23 07:38:37 瀏覽:805
千尋位置手簿哪裡輸入賬號密碼 發布:2025-03-23 07:34:50 瀏覽:419