圖像線性歸一化演算法python(圖像歸一化方法)

本文目錄一覽:

圖像處理的Python問題,怎麼解決

imtools.py裡面也要有numpy 的引用才對

def histeq(im,nbr_bins=256):

“””對一幅灰度圖像進行直方圖均衡化”””

#計算圖像的直方圖

imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)

cdf = imhist.cumsum() #累計分布函數

cdf = 255 * cdf / cdf[-1] #歸一化

#使用累計分布函數的線性插值,計算新的像素

im2 = interp(im.flatten(),bins[:-1],cdf)

return im2.reshape(im.shape),cdf

以上代碼我定義在imtools.py文件里並且放在了python2.7里

然後我在num.py里引用他

Python code?

1

2

3

4

5

6

7

8

9

10

from PIL import Image

from pylab import *

from numpy import *

import imtools

im= array(Image.open(‘E:\\daima\\pydaima\\shijue\\tupian1\\gang2.jpg’).convert(‘L’))

im2,cdf =imtools.histeq(im)

出現以下錯誤:

Traceback (most recent call last):

File “pyshell#56”, line 1, in module

a=imtools.histeq(im)

File “E:\daima\pydaima\shijue\imtools.py”, line 32, in histeq

NameError: global name ‘histogram’ is not defined

PYTHON實現對CSV文件多維不同單位數據的歸一化處理

1)線性歸一化

這種歸一化比較適用在數值比較集中的情況,缺陷就是如果max和min不穩定,很容易使得歸一化結果不穩定,使得後續的效果不穩定,實際使用中可以用經驗常量來代替max和min。

2)標準差標準化

經過處理的數據符合標準正態分布,即均值為0,標準差為1。

3)非線性歸一化

經常用在數據分化較大的場景,有些數值大,有些很小。通過一些數學函數,將原始值進行映射。該方法包括log、指數、反正切等。需要根據數據分布的情況,決定非線性函數的曲線。

log函數:x = lg(x)/lg(max)

反正切函數:x = atan(x)*2/pi

Python實現

線性歸一化

定義數組:x = numpy.array(x)

獲取二維數組列方向的最大值:x.max(axis = 0)

獲取二維數組列方向的最小值:x.min(axis = 0)

對二維數組進行線性歸一化:

def max_min_normalization(data_value, data_col_max_values, data_col_min_values):

“”” Data normalization using max value and min value

Args:

data_value: The data to be normalized

data_col_max_values: The maximum value of data’s columns

data_col_min_values: The minimum value of data’s columns

“””

data_shape = data_value.shape

data_rows = data_shape[0]

data_cols = data_shape[1]

for i in xrange(0, data_rows, 1):

for j in xrange(0, data_cols, 1):

data_value[i][j] = \

(data_value[i][j] – data_col_min_values[j]) / \

(data_col_max_values[j] – data_col_min_values[j])

標準差歸一化

定義數組:x = numpy.array(x)

獲取二維數組列方向的均值:x.mean(axis = 0)

獲取二維數組列方向的標準差:x.std(axis = 0)

對二維數組進行標準差歸一化:

def standard_deviation_normalization(data_value, data_col_means,

data_col_standard_deviation):

“”” Data normalization using standard deviation

Args:

data_value: The data to be normalized

data_col_means: The means of data’s columns

data_col_standard_deviation: The variance of data’s columns

“””

data_shape = data_value.shape

data_rows = data_shape[0]

data_cols = data_shape[1]

for i in xrange(0, data_rows, 1):

for j in xrange(0, data_cols, 1):

data_value[i][j] = \

(data_value[i][j] – data_col_means[j]) / \

data_col_standard_deviation[j]

非線性歸一化(以lg為例)

定義數組:x = numpy.array(x)

獲取二維數組列方向的最大值:x.max(axis=0)

獲取二維數組每個元素的lg值:numpy.log10(x)

獲取二維數組列方向的最大值的lg值:numpy.log10(x.max(axis=0))

對二維數組使用lg進行非線性歸一化:

def nonlinearity_normalization_lg(data_value_after_lg,

data_col_max_values_after_lg):

“”” Data normalization using lg

Args:

data_value_after_lg: The data to be normalized

data_col_max_values_after_lg: The maximum value of data’s columns

“””

data_shape = data_value_after_lg.shape

data_rows = data_shape[0]

data_cols = data_shape[1]

for i in xrange(0, data_rows, 1):

for j in xrange(0, data_cols, 1):

data_value_after_lg[i][j] = \

data_value_after_lg[i][j] / data_col_max_values_after_lg[j]

OpenCV Python 系列教程4 – OpenCV 圖像處理(上)

學習目標:

OpenCV 中有 150 多種色彩空間轉化的方法,這裡只討論兩種:

HSV的色相範圍為[0,179],飽和度範圍為[0,255],值範圍為[0,255]。不同的軟體使用不同的規模。如果要比較 OpenCV 值和它們,你需要標準化這些範圍。

HSV 和 HLV 解釋

運行結果:該段程序的作用是檢測藍色目標,同理可以檢測其他顏色的目標

結果中存在一定的噪音,之後的章節將會去掉它

這是物體跟蹤中最簡單的方法。一旦你學會了等高線的函數,你可以做很多事情,比如找到這個物體的質心,用它來跟蹤這個物體,僅僅通過在相機前移動你的手來畫圖表,還有很多其他有趣的事情。

菜鳥教程 在線 HSV- BGR 轉換

比如要找出綠色的 HSV 值,可以使用上面的程序,得到的值取一個上下界。如上面的取下界 [H-10, 100, 100],上界 [H+10, 255, 255]

或者使用其他工具如 GIMP

學習目標:

對圖像進行閾值處理,算是一種最簡單的圖像分割方法,基於圖像與背景之間的灰度差異,此項分割是基於像素級的分割

threshold(src, thresh, maxval, type[, dst]) – retval, dst

計算圖像小區域的閾值。所以我們對同一幅圖像的不同區域得到不同的閾值,這給我們在不同光照下的圖像提供了更好的結果。

三個特殊的輸入參數和一個輸出參數

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) – dst

opencv-threshold-python

OpenCV 圖片集

本節原文

學習目標:

OpenCV 提供兩種變換函數: cv2.warpAffine 和 cv2.warpPerspective

cv2.resize() 完成縮放

文檔說明

運行結果

說明 : cv2.INTER_LINEAR 方法比 cv2.INTER_CUBIC 還慢,好像與官方文檔說的不一致? 有待驗證。

速度比較: INTER_CUBIC INTER_NEAREST INTER_LINEAR INTER_AREA INTER_LANCZOS4

改變圖像的位置,創建一個 np.float32 類型的變換矩陣,

warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) – dst

運行結果:

旋轉角度( )是通過一個變換矩陣變換的:

OpenCV 提供的是可調旋轉中心的縮放旋轉,這樣你可以在任何你喜歡的位置旋轉。修正後的變換矩陣為

這裡

OpenCV 提供了 cv2.getRotationMatrix2D 控制

cv2.getRotationMatrix2D(center, angle, scale) → retval

運行結果

cv2.getAffineTransform(src, dst) → retval

函數關係:

\begin{bmatrix} x’_i \ y’_i \end{bmatrix}\begin{bmatrix} x’_i \ y’_i \end{bmatrix} =

其中

運行結果:圖上的點便於觀察,兩圖中的紅點是相互對應的

透視變換需要一個 3×3 變換矩陣。轉換之後直線仍然保持筆直,要找到這個變換矩陣,需要輸入圖像上的 4 個點和輸出圖像上的對應點。在這 4 個點中,有 3 個不應該共線。通過 cv2.getPerspectiveTransform 計算得到變換矩陣,得到的矩陣 cv2.warpPerspective 變換得到最終結果。

本節原文

平滑處理(smoothing)也稱模糊處理(bluring),是一種簡單且使用頻率很高的圖像處理方法。平滑處理的用途:常見是用來 減少圖像上的噪點或失真 。在涉及到降低圖像解析度時,平滑處理是很好用的方法。

圖像濾波:盡量保留圖像細節特徵的條件下對目標圖像的雜訊進行抑制,其處理效果的好壞將直接影響到後續圖像處理和分析的有效性和可靠性。

消除圖像中的雜訊成分叫做圖像的平滑化或濾波操作。信號或圖像的能量大部分集中在幅度譜的低頻和中頻段,在高頻段,有用的信息會被雜訊淹沒。因此一個能降低高頻成分幅度的濾波器就能夠減弱雜訊的影響。

濾波的目的:抽出對象的特徵作為圖像識別的特徵模式;為適應圖像處理的要求,消除圖像數字化時混入的雜訊。

濾波處理的要求:不能損壞圖像的輪廓及邊緣等重要信息;圖像清晰視覺效果好。

平滑濾波是低頻增強的空間濾波技術,目的:模糊和消除噪音。

空間域的平滑濾波一般採用簡單平均法,即求鄰近像元點的平均亮度值。鄰域的大小與平滑的效果直接相關,鄰域越大平滑效果越好,但是鄰域過大,平滑也會使邊緣信息的損失的越大,從而使輸出圖像變得模糊。因此需要選擇合適的鄰域。

濾波器:一個包含加權係數的窗口,利用濾波器平滑處理圖像時,把這個窗口放在圖像上,透過這個窗口來看我們得到的圖像。

線性濾波器:用於剔除輸入信號中不想要的頻率或者從許多頻率中選擇一個想要的頻率。

低通濾波器、高通濾波器、帶通濾波器、帶阻濾波器、全通濾波器、陷波濾波器

boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]) – dst

均值濾波是方框濾波歸一化後的特殊情況。歸一化就是要把處理的量縮放到一個範圍內如 (0,1),以便統一處理和直觀量化。非歸一化的方框濾波用於計算每個像素鄰近內的積分特性,比如密集光流演算法中用到的圖像倒數的協方差矩陣。

運行結果:

均值濾波是典型的線性濾波演算法,主要方法為鄰域平均法,即用一片圖像區域的各個像素的均值來代替原圖像中的各個像素值。一般需要在圖像上對目標像素給出一個模板(內核),該模板包括了其周圍的臨近像素(比如以目標像素為中心的周圍8(3×3-1)個像素,構成一個濾波模板,即 去掉目標像素本身 )。再用模板中的全體像素的平均值來代替原來像素值。即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理後圖像在該點上的灰度個g(x,y),即個g(x,y)=1/m ∑f(x,y) ,其中m為該模板中包含當前像素在內的像素總個數。

均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除雜訊點。

cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) → dst

結果:

高斯濾波:線性濾波,可以消除高斯雜訊,廣泛應用於圖像處理的減噪過程。高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過 加權平均 後得到。高斯濾波的具體操作是:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。

高斯濾波有用但是效率不高。

高斯模糊技術生成的圖像,其視覺效果就像是經過一個半透明屏幕在觀察圖像,這與鏡頭焦外成像效果散景以及普通照明陰影中的效果都明顯不同。高斯平滑也用於計算機視覺演算法中的預先處理階段,以增強圖像在不同比例大小下的圖像效果(參見尺度空間表示以及尺度空間實現)。從數學的角度來看,圖像的高斯模糊過程就是圖像與正態分布做卷積。由於正態分布又叫作高斯分布,所以這項技術就叫作高斯模糊。

高斯濾波器是一類根據高斯函數的形狀來選擇權值的線性平滑濾波器。 高斯平滑濾波器對於抑制服從正態分布的雜訊非常有效。

一維零均值高斯函數為: 高斯分布參數 決定了高斯函數的寬度。

高斯雜訊的產生

GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) – dst

線性濾波容易構造,並且易於從頻率響應的角度來進行分析。

許多情況,使用近鄰像素的非線性濾波會得到更好的結果。比如在雜訊是散粒雜訊而不是高斯雜訊,即圖像偶爾會出現很大值的時候,用高斯濾波器進行圖像模糊時,雜訊像素不會被消除,而是轉化為更為柔和但仍然可見的散粒。

中值濾波(Median filter)是一種典型的非線性濾波技術,基本思想是用像素點鄰域灰度值的中值來代替該像素點的灰度值,該方法在去除脈衝雜訊、椒鹽雜訊『椒鹽雜訊又稱脈衝雜訊,它隨機改變一些像素值,是由圖像感測器,傳輸信道,解碼處理等產生的黑白相間的亮暗點雜訊。椒鹽雜訊往往由圖像切割引起。』的同時又能保留圖像邊緣細節,

中值濾波是基於排序統計理論的一種能有效抑制雜訊的非線性信號處理技術,其基本原理是把數字圖像或數字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的雜訊點,對於 斑點雜訊(speckle noise)和椒鹽雜訊(salt-and-pepper noise) 來說尤其有用,因為它不依賴於鄰域內那些與典型值差別很大的值。中值濾波器在處理連續圖像窗函數時與線性濾波器的工作方式類似,但濾波過程卻不再是加權運算。

中值濾波在一定的條件下可以克服常見線性濾波器如最小均方濾波、方框濾波器、均值濾波等帶來的圖像細節模糊,而且對濾除脈衝干擾及圖像掃描雜訊非常有效,也常用於保護邊緣信息, 保存邊緣的特性使它在不希望出現邊緣模糊的場合也很有用,是非常經典的平滑雜訊處理方法。

與均值濾波比較:

說明:中值濾波在一定條件下,可以克服線性濾波器(如均值濾波等)所帶來的圖像細節模糊,而且對濾除脈衝干擾即圖像掃描雜訊最為有效。在實際運算過程中並不需要圖像的統計特性,也給計算帶來不少方便。 但是對一些細節多,特別是線、尖頂等細節多的圖像不宜採用中值濾波。

雙邊濾波(Bilateral filter)是一種非線性的濾波方法,是結合 圖像的空間鄰近度和像素值相似度 的一種折衷處理,同時考慮空域信息和灰度相似性,達到保邊去噪的目的。具有簡單、非迭代、局部的特點。

雙邊濾波器的好處是可以做邊緣保存(edge preserving),一般過去用的維納濾波或者高斯濾波去降噪,都會較明顯地模糊邊緣,對於高頻細節的保護效果並不明顯。雙邊濾波器顧名思義比高斯濾波多了一個高斯方差 sigma-d ,它是基於空間分布的高斯濾波函數,所以在邊緣附近,離的較遠的像素不會太多影響到邊緣上的像素值,這樣就保證了邊緣附近像素值的保存。 但是由於保存了過多的高頻信息,對於彩色圖像里的高頻雜訊,雙邊濾波器不能夠乾淨的濾掉,只能夠對於低頻信息進行較好的濾波。

運行結果

學習目標:

形態變換是基於圖像形狀的一些簡單操作。它通常在二進位圖像上執行。

膨脹與腐蝕實現的功能

侵蝕的基本思想就像土壤侵蝕一樣,它會侵蝕前景物體的邊界(總是試圖保持前景為白色)。那它是做什麼的?內核在圖像中滑動(如在2D卷積中)。只有當內核下的所有像素都是 1 時,原始圖像中的像素( 1 或 0 )才會被視為 1 ,否則它將被侵蝕(變為零)

erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) – dst

與腐蝕的操作相反。如果內核下的至少一個像素為「1」,則像素元素為「1」。因此它增加了圖像中的白色區域或前景對象的大小增加。通常,在去除噪音的情況下,侵蝕之後是擴張。因為,侵蝕會消除白雜訊,但它也會縮小我們的物體。所以我們擴大它。由於噪音消失了,它們不會再回來,但我們的物體區域會增加。它也可用於連接對象的破碎部分

python怎麼做均值方差歸一化

可以用線性歸一化,就是找到最大值和最小值。

平均數是表示一組數據集中趨勢的量數,是指在一組數據中所有數據之和再除以這組數據的個數。它是反映數據集中趨勢的一項指標。解答平均數應用題的關鍵在於確定「總數量」以及和總數量對應的總份數。在統計工作中,平均數(均值)和標準差是描述數據資料集中趨勢和離散程度的兩個最重要的測度值。

線性歸一化

線性歸一化是圖像處理中的專業術語,意思是將圖像進行等比例的擴大和縮小,還有一種是非線性歸一化,具體操作方法是根據圖像的實際結構進行擴大和縮小。

在python上數據歸一化後怎樣還原

數據歸一化方法有兩種形式,一種是把數變為(0,1)之間的小數,一種是把有量綱表達式變為無量綱表達式。1、把數變為(0,1)之間的小數主要是為了數據處理方便提出來的,把數據映射到0~1範圍之內處理,更加便捷快速,應該歸到數字信號處理範疇之內。2、是把有量綱表達式變為無量綱表達式歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。

原創文章,作者:QPLLG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130284.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QPLLG的頭像QPLLG
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相關推薦

  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29

發表回復

登錄後才能評論