<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
影象灰度上移變換使用的表示式為:
DB=DA+50
該演演算法將實現影象灰度值的上移,從而提升影象的亮度,結合直方圖對比的實現程式碼如下所示。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取影象 img = cv2.imread('lena-hd.png') #影象灰度轉換 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #獲取影象高度和寬度 height = grayImage.shape[0] width = grayImage.shape[1] result = np.zeros((height, width), np.uint8) #影象灰度上移變換 DB=DA+50 for i in range(height): for j in range(width): if (int(grayImage[i,j]+50) > 255): gray = 255 else: gray = int(grayImage[i,j]+50) result[i,j] = np.uint8(gray) #計算原圖的直方圖 hist = cv2.calcHist([img], [0], None, [256], [0,255]) #計算灰度變換的直方圖 hist_res = cv2.calcHist([result], [0], None, [256], [0,255]) #原始影象 plt.figure(figsize=(8, 6)) plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off') #繪製掩膜 plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y") #繪製掩膜設定後的影象 plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off') #繪製直方圖 plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y") plt.show()
其執行結果如圖1所示,其中(a)表示原始影象,(b)表示對應的灰度直方圖,(c)表示灰度上移後的影象,(d)是對應的直方圖。對比發現,圖1(d)比圖1(b)的灰度級整體高了50,曲線整體向右平移了50個單位。
該演演算法將減弱影象的對比度,使用的表示式為:
DB=DA×0.8
Python結合直方圖實現灰度對比度減弱的程式碼如下所示。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取影象 img = cv2.imread('lena-hd.png') #影象灰度轉換 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #獲取影象高度和寬度 height = grayImage.shape[0] width = grayImage.shape[1] result = np.zeros((height, width), np.uint8) #影象對比度減弱變換 DB=DA×0.8 for i in range(height): for j in range(width): gray = int(grayImage[i,j]*0.8) result[i,j] = np.uint8(gray) #計算原圖的直方圖 hist = cv2.calcHist([img], [0], None, [256], [0,255]) #計算灰度變換的直方圖 hist_res = cv2.calcHist([result], [0], None, [256], [0,255]) #原始影象 plt.figure(figsize=(8, 6)) plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off') #繪製掩膜 plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y") #繪製掩膜設定後的影象 plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off') #繪製直方圖 plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y") plt.show()
其執行結果如圖2所示,其中(a)和(b)表示原始影象和對應的灰度直方圖,(c)和(d)表示灰度減弱或對比度縮小的影象及對應的直方圖。圖2(d)比圖2(b)的灰度級整體縮小了0.8倍,繪製的曲線更加密集。
該演演算法將影象的顏色反色,對原影象的畫素值進行反轉,即黑色變為白色,白色變為黑色,使用的表示式為:
DB=255-DA
實現程式碼如下所示。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取影象 img = cv2.imread('lena-hd.png') #影象灰度轉換 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #獲取影象高度和寬度 height = grayImage.shape[0] width = grayImage.shape[1] result = np.zeros((height, width), np.uint8) #影象灰度反色變換 DB=255-DA for i in range(height): for j in range(width): gray = 255 - grayImage[i,j] result[i,j] = np.uint8(gray) #計算原圖的直方圖 hist = cv2.calcHist([img], [0], None, [256], [0,255]) #計算灰度變換的直方圖 hist_res = cv2.calcHist([result], [0], None, [256], [0,255]) #原始影象 plt.figure(figsize=(8, 6)) plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off') #繪製掩膜 plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y") #繪製掩膜設定後的影象 plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off') #繪製直方圖 plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y") plt.show()
其執行結果如圖3所示,其中(a)和(b)表示原始影象和對應的灰度直方圖,(c)和(d)表示灰度反色變換影象及對應的直方圖。圖3(d)與圖3(b)是反相對稱的,整個灰度值滿足DB=255-DA表示式。
該演演算法將增加低灰度區域的對比度,從而增強暗部的細節,使用的表示式為:
下面程式碼實現了影象灰度的對數變換及直方圖對比。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取影象 img = cv2.imread('lena-hd.png') #影象灰度轉換 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #獲取影象高度和寬度 height = grayImage.shape[0] width = grayImage.shape[1] result = np.zeros((height, width), np.uint8) #影象灰度對數變換 for i in range(height): for j in range(width): gray = 42 * np.log(1.0 + grayImage[i,j]) result[i,j] = np.uint8(gray) #計算原圖的直方圖 hist = cv2.calcHist([img], [0], None, [256], [0,255]) #計算灰度變換的直方圖 hist_res = cv2.calcHist([result], [0], None, [256], [0,255]) #原始影象 plt.figure(figsize=(8, 6)) plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off') #繪製原始影象直方圖 plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y") #灰度變換後的影象 plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off') #灰度變換影象的直方圖 plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y") plt.show()
其執行結果如圖4所示,其中(a)和(b)表示原始影象和對應的灰度直方圖,(c)和(d)表示灰度對數變換影象及對應的直方圖。
該演演算法原型為threshold(Gray,127,255,cv2.THRESH_BINARY),當前畫素點的灰度值大於thresh閾值時(如127),其畫素點的灰度值設定為最大值(如9位灰度值最大為255);否則,畫素點的灰度值設定為0。二進位制閾值化處理及直方圖對比的Python程式碼如下所示。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #讀取影象 img = cv2.imread('lena-hd.png') #影象灰度轉換 grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #二進位制閾值化處理 r, result = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY) #計算原圖的直方圖 hist = cv2.calcHist([img], [0], None, [256], [0,256]) #計算閾值化處理的直方圖 hist_res = cv2.calcHist([result], [0], None, [256], [0,256]) #原始影象 plt.figure(figsize=(8, 6)) plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off') #繪製原始影象直方圖 plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y") #閾值化處理後的影象 plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off') #閾值化處理影象的直方圖 plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y") plt.show()
其執行結果如圖5所示,其中(a)和(b)表示原始影象和對應的灰度直方圖,(c)和(d)表示影象閾值化處理及對應的直方圖,圖5(d)中可以看到,灰度值僅僅分佈於0(黑色)和255(白色)兩種灰度級。
本文主要講解影象直方圖理論知識以及直方圖繪製方法,包括灰度增強直方圖對比、灰度減弱直方圖對比、影象反色直方圖對比、影象對數變換直方圖對比、影象閾值化處理直方圖對比。灰度直方圖是灰度級的函數,描述的是影象中每種灰度級畫素的個數,反映影象中每種灰度出現的頻率。這篇文章的知識點將為後續影象處理和影象運算對比提供支撐。
以上就是Python影象運算之影象灰度直方圖對比詳解的詳細內容,更多關於Python灰度直方圖對比的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45