Python實現圖像增強
本文實例為大家分享了Python實現圖像增強的具體代碼,供大家參考,具體內容如下
題目描述:對于下面這幅圖像(圖 1),請問可以通過那些圖像增強的手段,達到改善視覺效果的目的?請顯示處理結果,并附簡要處理流程說明。
圖 1 原圖
常用的圖像增強方法有以下幾種:
1.提高對比度
采用了線性函數對圖像的灰度值進行變換。
2.Gamma校正
采用了非線性函數(指數函數)對圖像的灰度值進行變換。
3.直方圖均衡化
將原始圖像的直方圖通過積分概率密度函數轉化為概率密度為1(理想情況)的圖像,從而達到提高對比度的作用。直方圖均衡化的實質也是一種特定區(qū)域的展寬,但是會導致整個圖像向亮的區(qū)域變換。當原始圖像給定時,對應的直方圖均衡化的效果也相應的確定了。
4.直方圖規(guī)定化
針對直方圖均衡化的存在的一些問題,將原始圖像的直方圖轉化為規(guī)定的直方圖的形式。一般目標圖像的直方圖的確定需要參考原始圖像的直方圖,并利用多高斯函數得到。
5. 中值、均值濾波器
均值濾波方法:對待處理的當前像素,選擇一個模板,該模板為其鄰近的若干個像素組成,用模板的均值來替代原像素的值的方法。
中值濾波方法:對待處理的當前像素,選擇一個模板,該模板為其鄰近的若干個像素組成,對模板的像素由小到大進行排序,再用模板的中值來替代原像素的值的方法。
從圖像中我們可以看出,該圖片帶有很多椒鹽噪聲,并且圖像有些暗,于是我們選擇中值濾波方法對圖片進行處理(中值濾波對椒鹽噪聲具有較好效果),并提高對比度和亮度。
處理流程:
第一步:采用中值濾波方法對圖像進行處理,處理后,結果如圖2所示:
圖2 中值濾波
第二步:Gamma校正,處理后,結果如圖3所示:
圖3 Gamma校正
第三步:提升對比度,亮度,處理后,結果如圖4所示:
圖4 對比度、亮度提升
最后輸出對比圖,如圖5所示:
圖5 效果對比圖
Python代碼:
#author:lph #funtion:image enhance ? import cv2 import numpy as np from tkinter import * from skimage import filters,exposure import matplotlib.pyplot as plt from skimage.morphology import disk from matplotlib.font_manager import FontProperties #讀入圖片 im = cv2.imread('./image/image.png',0) im_copy = cv2.imread('./image/image.png',0) #如果圖片為空,返回錯誤信息,并終止程序 if im is None: ? ? print("圖片打開失敗!") ? ? exit() #中值濾波去噪 medStep = 3 # 設置為3*3的濾波器 def m_filter(x, y, step): ? ? """中值濾波函數""" ? ? sum_s=[] # 定義空數組 ? ? for k in range(-int(step/2),int(step/2)+1): ? ? ? ? for m in range(-int(step/2),int(step/2)+1): ? ? ? ? ? ? sum_s.append(im[x+k][y+m]) # 把模塊的像素添加到空數組 ? ? sum_s.sort() # 對模板的像素由小到大進行排序 ? ? return sum_s[(int(step*step/2)+1)] for i in range(int(medStep/2),im.shape[0]-int(medStep/2)): ? ? for j in range(int(medStep/2),im.shape[1]-int(medStep/2)): ? ? ? ? im_copy[i][j] = m_filter(i, j, medStep) # 用模板的中值來替代原像素的值 cv2.imshow("Median",im_copy) #Gamma校正 img3 = exposure.adjust_gamma(im_copy,1.05) cv2.imshow("Gamma", img3) #對比度、亮度增強 def Contrast_and_Brightness(alpha,beta,img): ? ? """使用公式f(x)=α.g(x)+β""" ? ? #α調節(jié)對比度,β調節(jié)亮度 ? ? blank = np.zeros(img.shape,img.dtype)#創(chuàng)建圖片類型的零矩陣 ? ? dst = cv2.addWeighted(img,alpha,blank,1-alpha,beta)#圖像混合加權 ? ? return dst img4 = Contrast_and_Brightness(1.1,30,img3) cv2.imshow("Contrast", img4) #創(chuàng)建一個窗口 plt.figure('對比圖',figsize=(7,5)) # 中文字體設置 font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) #新宋體 #顯示原圖 plt.subplot(121) #子圖1 #顯示原圖,設置標題和字體 plt.imshow(im,plt.cm.gray), plt.title('處理前圖片', fontproperties = font) ? #顯示處理過的圖像 plt.subplot(122) #子圖2 #顯示處理后的圖,設置標題和字體 plt.imshow(img4,plt.cm.gray), plt.title('處理后圖片', fontproperties = font) plt.show() # 銷毀所有窗口 cv2.destroyAllWindows()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python實現動態(tài)添加類的屬性或成員函數的解決方法
這篇文章主要介紹了Python實現動態(tài)添加類的屬性或成員函數的解決方法,在類似插件開發(fā)的時候會比較有用,需要的朋友可以參考下2014-07-07windows系統下Python環(huán)境的搭建(Aptana Studio)
這篇文章主要介紹了windows系統下Python環(huán)境的搭建(Aptana Studio),需要的朋友可以參考下2017-03-03