網(wǎng)站首頁 編程語言 正文
本文實(shí)例為大家分享了Python實(shí)現(xiàn)圖像增強(qiáng)的具體代碼,供大家參考,具體內(nèi)容如下
題目描述:對(duì)于下面這幅圖像(圖 1),請(qǐng)問可以通過那些圖像增強(qiáng)的手段,達(dá)到改善視覺效果的目的?請(qǐng)顯示處理結(jié)果,并附簡要處理流程說明。
圖 1 原圖?
常用的圖像增強(qiáng)方法有以下幾種:
1.提高對(duì)比度
采用了線性函數(shù)對(duì)圖像的灰度值進(jìn)行變換。
2.Gamma校正
采用了非線性函數(shù)(指數(shù)函數(shù))對(duì)圖像的灰度值進(jìn)行變換。
3.直方圖均衡化
將原始圖像的直方圖通過積分概率密度函數(shù)轉(zhuǎn)化為概率密度為1(理想情況)的圖像,從而達(dá)到提高對(duì)比度的作用。直方圖均衡化的實(shí)質(zhì)也是一種特定區(qū)域的展寬,但是會(huì)導(dǎo)致整個(gè)圖像向亮的區(qū)域變換。當(dāng)原始圖像給定時(shí),對(duì)應(yīng)的直方圖均衡化的效果也相應(yīng)的確定了。
4.直方圖規(guī)定化
針對(duì)直方圖均衡化的存在的一些問題,將原始圖像的直方圖轉(zhuǎn)化為規(guī)定的直方圖的形式。一般目標(biāo)圖像的直方圖的確定需要參考原始圖像的直方圖,并利用多高斯函數(shù)得到。
5. 中值、均值濾波器
均值濾波方法:對(duì)待處理的當(dāng)前像素,選擇一個(gè)模板,該模板為其鄰近的若干個(gè)像素組成,用模板的均值來替代原像素的值的方法。
中值濾波方法:對(duì)待處理的當(dāng)前像素,選擇一個(gè)模板,該模板為其鄰近的若干個(gè)像素組成,對(duì)模板的像素由小到大進(jìn)行排序,再用模板的中值來替代原像素的值的方法。
從圖像中我們可以看出,該圖片帶有很多椒鹽噪聲,并且圖像有些暗,于是我們選擇中值濾波方法對(duì)圖片進(jìn)行處理(中值濾波對(duì)椒鹽噪聲具有較好效果),并提高對(duì)比度和亮度。
處理流程:
第一步:采用中值濾波方法對(duì)圖像進(jìn)行處理,處理后,結(jié)果如圖2所示:
圖2 中值濾波
第二步:Gamma校正,處理后,結(jié)果如圖3所示:
圖3 Gamma校正
第三步:提升對(duì)比度,亮度,處理后,結(jié)果如圖4所示:
圖4 對(duì)比度、亮度提升
最后輸出對(duì)比圖,如圖5所示:
圖5 效果對(duì)比圖?
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)
#如果圖片為空,返回錯(cuò)誤信息,并終止程序
if im is None:
? ? print("圖片打開失敗!")
? ? exit()
#中值濾波去噪
medStep = 3 # 設(shè)置為3*3的濾波器
def m_filter(x, y, step):
? ? """中值濾波函數(shù)"""
? ? sum_s=[] # 定義空數(shù)組
? ? 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]) # 把模塊的像素添加到空數(shù)組
? ? sum_s.sort() # 對(duì)模板的像素由小到大進(jìn)行排序
? ? 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)
#對(duì)比度、亮度增強(qiáng)
def Contrast_and_Brightness(alpha,beta,img):
? ? """使用公式f(x)=α.g(x)+β"""
? ? #α調(diào)節(jié)對(duì)比度,β調(diào)節(jié)亮度
? ? blank = np.zeros(img.shape,img.dtype)#創(chuàng)建圖片類型的零矩陣
? ? dst = cv2.addWeighted(img,alpha,blank,1-alpha,beta)#圖像混合加權(quán)
? ? return dst
img4 = Contrast_and_Brightness(1.1,30,img3)
cv2.imshow("Contrast", img4)
#創(chuàng)建一個(gè)窗口
plt.figure('對(duì)比圖',figsize=(7,5))
# 中文字體設(shè)置
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) #新宋體
#顯示原圖
plt.subplot(121) #子圖1
#顯示原圖,設(shè)置標(biāo)題和字體
plt.imshow(im,plt.cm.gray), plt.title('處理前圖片', fontproperties = font)
?
#顯示處理過的圖像
plt.subplot(122) #子圖2
#顯示處理后的圖,設(shè)置標(biāo)題和字體
plt.imshow(img4,plt.cm.gray), plt.title('處理后圖片', fontproperties = font)
plt.show()
# 銷毀所有窗口
cv2.destroyAllWindows()
原文鏈接:https://blog.csdn.net/lph188/article/details/84538103
相關(guān)推薦
- 2022-08-25 R語言多元線性回歸實(shí)例詳解_R語言
- 2022-09-01 詳解C語言中for循環(huán)與while循環(huán)的用法_C 語言
- 2022-08-10 go?modules中replace使用方法_Golang
- 2022-05-04 詳解python的異常捕獲_python
- 2022-06-06 淺談Redis?中的過期刪除策略和內(nèi)存淘汰機(jī)制_Redis
- 2022-07-02 Python使用struct庫的用法小結(jié)_python
- 2022-05-22 Nginx安裝后常用功能配置基礎(chǔ)篇_nginx
- 2022-07-08 python中的type,元類,類,對(duì)象用法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支