91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中圖像量化處理的示例分析

發布時間:2022-02-08 09:21:53 來源:億速云 閱讀:423 作者:小新 欄目:開發技術

小編給大家分享一下Python中圖像量化處理的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一.圖像量化處理原理

量化(Quantization)旨在將圖像像素點對應亮度的連續變化區間轉換為單個特定值的過程,即將原始灰度圖像的空間坐標幅度值離散化。量化等級越多,圖像層次越豐富,灰度分辨率越高,圖像的質量也越好;量化等級越少,圖像層次欠豐富,灰度分辨率越低,會出現圖像輪廓分層的現象,降低了圖像的質量。圖8-1是將圖像的連續灰度值轉換為0至255的灰度級的過程[1-3]。

Python中圖像量化處理的示例分析

如果量化等級為2,則將使用兩種灰度級表示原始圖片的像素(0-255),灰度值小于128的取0,大于等于128的取128;如果量化等級為4,則將使用四種灰度級表示原始圖片的像素,新圖像將分層為四種顏色,0-64區間取0,64-128區間取64,128-192區間取128,192-255區間取192,依次類推。

圖8-2是對比不同量化等級的“Lena”圖。其中(a)的量化等級為256,(b)的量化等級為64,(c)的量化等級為16,(d)的量化等級為8,(e)的量化等級為4,(f)的量化等級為2。

Python中圖像量化處理的示例分析

二.圖像量化實現

圖像量化的實現過程是建立一張臨時圖片,接著循環遍歷原始圖像中所有像素點,判斷每個像素點應該屬于的量化等級,最后將臨時圖像顯示。下面的代碼將灰度圖像轉換為兩種量化等級[4]。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('lena-hd.png')

#獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]

#創建一幅圖像
new_img = np.zeros((height, width, 3), np.uint8)

#圖像量化操作 量化等級為2
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 128:
                gray = 0
            else:
                gray = 128
            new_img[i, j][k] = np.uint8(gray)
        
#顯示圖像
cv2.imshow("src", img)
cv2.imshow("", new_img)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

其輸出結果如圖8-3所示,它將灰度圖像劃分為兩種量化等級。

Python中圖像量化處理的示例分析

三.圖像量化等級對比

下面的代碼分別比較了量化等級為2、4、8的量化處理效果[5]。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('lena-hd.png')

#獲取圖像高度和寬度
height = img.shape[0]
width = img.shape[1]

#創建一幅圖像
new_img1 = np.zeros((height, width, 3), np.uint8)
new_img2 = np.zeros((height, width, 3), np.uint8)
new_img3 = np.zeros((height, width, 3), np.uint8)

#圖像量化等級為2的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 128:
                gray = 0
            else:
                gray = 128
            new_img1[i, j][k] = np.uint8(gray)

#圖像量化等級為4的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 64:
                gray = 0
            elif img[i, j][k] < 128:
                gray = 64
            elif img[i, j][k] < 192:
                gray = 128
            else:
                gray = 192
            new_img2[i, j][k] = np.uint8(gray)

#圖像量化等級為8的量化處理
for i in range(height):
    for j in range(width):
        for k in range(3): #對應BGR三分量
            if img[i, j][k] < 32:
                gray = 0
            elif img[i, j][k] < 64:
                gray = 32
            elif img[i, j][k] < 96:
                gray = 64
            elif img[i, j][k] < 128:
                gray = 96
            elif img[i, j][k] < 160:
                gray = 128
            elif img[i, j][k] < 192:
                gray = 160
            elif img[i, j][k] < 224:
                gray = 192
            else:
                gray = 224
            new_img3[i, j][k] = np.uint8(gray)

#用來正常顯示中文標簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = ['(a) 原始圖像', '(b) 量化-L2', '(c) 量化-L4', '(d) 量化-L8']  
images = [img, new_img1, new_img2, new_img3]  
for i in range(4):  
   plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

輸出結果如圖8-4所示,該代碼調用matplotlib.pyplot庫繪制了四幅圖像,其中(a)表示原始圖像,(b)表示等級為2的量化處理,(c)表示等級為4的量化處理,(d)表示等級為8的量化處理。

Python中圖像量化處理的示例分析

四.K-Means聚類實現量化處理

除了通過對像素進行統計比較量化處理,還可以根據像素之間的相似性進行聚類處理。這里補充一個基于K-Means聚類算法的量化處理過程,它能夠將彩色圖像RGB像素點進行顏色分割和顏色量化。此外,該部分只是帶領讀者簡單認識該方法,更多K-Means聚類的知識將在圖像分割文章中進行詳細敘述[6]。

# coding: utf-8
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('luo.png') 

#圖像二維像素轉換為一維
data = img.reshape((-1,3))
data = np.float32(data)

#定義中心 (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS +
            cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

#設置標簽
flags = cv2.KMEANS_RANDOM_CENTERS

#K-Means聚類 聚集成4類
compactness, labels, centers = cv2.kmeans(data, 8, None, criteria, 10, flags)


#圖像轉換回uint8二維類型
centers = np.uint8(centers)
res = centers[labels.flatten()]
dst = res.reshape((img.shape))

#圖像轉換為RGB顯示
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)


#用來正常顯示中文標簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = ['原始圖像', '聚類量化 K=8']  
images = [img, dst]  
for i in range(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

輸出結果如圖8-5所示。

Python中圖像量化處理的示例分析

它通過K-Means聚類算法將彩色人物圖像的灰度聚集成八種顏色。核心代碼如下:

cv2.kmeans(data, 8, None, criteria, 10, flags)

以上是“Python中圖像量化處理的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连山| 绥德县| 荆州市| 霍山县| 温宿县| 中阳县| 临安市| 安庆市| 泰顺县| 乐昌市| 南漳县| 蛟河市| 邹平县| 徐汇区| 怀来县| 凯里市| 平利县| 乐陵市| 达日县| 铁岭县| 澄迈县| 苍南县| 贵定县| 托里县| 双鸭山市| 新宁县| 克拉玛依市| 五莲县| 和平县| 石泉县| 铜川市| 平泉县| 克拉玛依市| 霸州市| 伊宁市| 凯里市| 青川县| 平武县| 太康县| 乌审旗| 乃东县|