matlab圖像增強分段線性函數_圖像增強、銳化,利用 PythonOpenCV 來實現 4 種方法!...

圖像增強目的使得模糊圖片變得更加清晰、圖片模糊的原因是因為像素灰度差值變化不大,圖片各區域產生視覺效果似乎都是一樣的, 沒有較為突出的地方,看起來不清晰的感覺

解決這個問題的最直接簡單辦法,放大像素灰度值差值、使圖像中的細節更加清晰。

目前較為常用的幾個方法:伽馬變換、線性變換、分段線性變換、直方圖均衡化,對于圖像對比度增強,都能取得不錯的效果!

本文將對每種方法 簡單介紹一下,并借助于 Python 、OpenCV 進行代碼實現,提前說一下哈,下面處理的圖像對象都是單通道灰度圖,不是三通道彩色圖!

1,線性變換

線性變換的原理是對所有像素值乘上一個擴張因子 47ac948a9e33e82dcfff2e1be83aed53.png,像素值大的變得越大,像素值小的變得越小,從而達到圖像增強的效果,這里利用 Numpy 的數組進行操作;ddd5bd75238efa2c913de95ceadb178f.png

需要注意的是,像素值最大為255,因此在數組相乘之后需要進行數值截斷操作,最終代碼如下:

def?line_trans_img(img,coffient):
????if?len(img.shape)?==?3:
????????img?=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
????out?=?2*img
????#像素截斷;;;
????out[out>255]?=?255
????out?=?np.around(out)
????return?out

這里 47ac948a9e33e82dcfff2e1be83aed53.png 設置為 2 ,變換結果如下,會看到強光處出現失真效果

6502edde2c81ce8a2f63ddbc07bbe06b.png
line.png

(這里對排列圖片做一下說明,從左到右依次為 原圖灰度圖、原圖灰度直方圖、處理之后的灰度圖、處理之后的灰度直方圖,以下的圖片排列方式相同)

2,伽馬變換

伽馬變換對像素值做的是冪次方變換,主要是圖像的灰度級發生改變,轉換的原理公式為:9ccc393ecb79c842551ef0874790fa7e.png
參數 ?的設定 可以參照下面:

580dc56df7eff8065a1daef8b3acbdba.png
Snipaste_2020-05-26_20-18-17.png
  • 當>1 時,會減小灰度級較高的地方,增大灰度級較低的地方;

  • 當 <1 時,會增大灰度級較高的地方,減小灰度級較低的地方;

def?gama_transfer(img,power1):
????if?len(img.shape)?==?3:
?????????img=?cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
????img?=?255*np.power(img/255,power1)
????img?=?np.around(img)
????img[img>255]?=?255
????out_img?=?img.astype(np.uint8)
????return?out_img

這里 Gamma 分別取 1.5,0.5,結果如下:

8a23696d29cc35b83813d030c304bc0d.png
gamma1.5.png
7a87b033ddbd5d44c7e4efefe41e068b.png
gamma0.5.png

結果來看,相對來說 ?對圖像增強的結果會更好一點

3,分段線性分割

分段線性分割,提前把圖像的灰度級分為幾部分,然后對每一部分的像素值做不同的線性變換,像素值基本變換原理:2d9dd27d8d716a9dec7c06615f992381.png

這里寫的代碼總感覺效率特別慢(逐像素改變),知道改進方法的小伙伴們望告知:

def?seg_augment_img(img,start,c1,end,c2,b2,c3,b3):
????if?len(img.shape)?==?3:
?????????img=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

????out_img?=?np.zeros(img.shape)
????for?i?in?range(img.shape[0]):
????????for?j?in?range(img.shape[1]):
????????????if?img[i][j]?????????????????out_img[i][j]?=?img[i][j]*c1
????????????elif?img[i][j]?????????????????out_img[i][j]?=?img[i][j]?*c2?+?b2
????????????else:
????????????????out_img[i][j]?=?img[i][j]?*?c3?+b3

????out_img[out_img>255]?=?255
????out?=?np.around(out_img)
????out?=?out.astype(np.uint8)
????return?out

函數中的參數分別為 50,0.5,150,3.6,-310,0.238,194,結果如下:

52347181498bc833a880c434210e3133.png
seg_line.png

4,直方圖均衡化

每個灰度圖像都有自己的灰度直方圖,均衡化的原理是,先根據灰度直方圖計算累加灰度直方圖,根據灰度圖與累加灰度圖的映射關系關聯輸入圖像與輸出圖圖像的映射關系

映射關系原理如下:c52c18f06d512b1e9ef4f589b9e42471.png

因此,這里幾個重要部分:1,計算出灰度直方圖;2,計算累加灰度直方圖;3,根據 1 和 2 得到映射關系,最終輸出灰度像素值;

def?get_imghist(img):
????#?判斷圖像是否為三通道;
????if?len(img.shape)?==?3:
????????img?=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
????#?無?Mask,256個bins,取值范圍為[0,255]
????hist?=?cv2.calcHist([img],[0],None,[256],[0,255])
????return?hist


def?cal_equalhist(img):
????if?len(img.shape)?==?3:
?????????img=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
????h,w?=?img.shape[:2]
????grathist?=?get_imghist(img)

????zerosumMoment?=?np.zeros([256],np.uint32)
????for?p?in?range(256):
????????if?p?==0:
????????????zerosumMoment[p]?=?grathist[0]
????????else:
????????????zerosumMoment[p]?=?zerosumMoment[p-1]?+grathist[p]

????output_q?=?np.zeros([256],np.uint8)
????cofficient?=?256.0/(h*w)
????for?p?in?range(256):
????????q?=?cofficient?*float(zerosumMoment[p])?-?1
????????if?q?>=?0:
????????????output_q[p]?=?math.floor(q)
????????else:
????????????output_q[p]?=?0

????equalhistimage?=?np.zeros(img.shape,np.uint8)
????for?i?in?range(h):
????????for?j?in?range(w):
????????????equalhistimage[i][j]?=?output_q[img[i][j]]

????#?第二種方法,opencv 庫函數自帶一種:
????#equalhistimage?=?cv2.equalizeHist(img)
????return?equalhistimage

結果如下,看起來還是不錯的!(這里圖片失真是因為燈光的原因)

cfb315e4388387d66fa35e7d3f5d6a44.png
equalhist.png

5,小總結

根據以上幾個增強方法來看,針對于本案例選取的圖像,線性增強方法相對效果并不太好,可能會適用于其它的種類圖像,而 Gamma轉換 ?和直方圖均衡化取得相對不錯的結果

但圖像增強、銳化沒有最優方法,每種方法都有自己的特點,需要根據自己選擇合適的

最后還是要提醒一下感興趣的小伙伴們,記得跟著敲一下代碼,加深一下應用原理!

推薦閱讀

不用 PS 摳圖,Python + OpenCV ?實現自動海報場景替換!

用 Python 對圖片主體輪廓進行提取、顏色標記、并計算區域面積

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396663.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396663.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396663.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python多人聊天室_Python基于Socket實現簡易多人聊天室

前言套接字(Sockets)是雙向通信信道的端點。 套接字可以在一個進程內&#xff0c;在同一機器上的進程之間&#xff0c;或者在不同主機的進程之間進行通信&#xff0c;主機可以是任何一臺有連接互聯網的機器。套接字可以通過多種不同的通道類型實現&#xff1a;Unix域套接字&…

計算機考研保護一志愿,考研良心大學,保護一志愿的考研名校!

大家好&#xff0c;我是&#xff0c;今天胖胖要跟大家送一些重要的干貨&#xff0c;就是對于選學校的小伙伴來說也好&#xff0c;或者是即將要參加研究生復試的小伙伴們來好胖胖在這里要跟大家說一個關于考研白名單的事情&#xff0c;因為大家都知道考研是會分黑名單和白名單&a…

python變量輸出到文件_使用函數將多個變量寫入文件

首先&#xff0c;要獲得當前正在執行的腳本名&#xff0c;或者更確切地說是調用函數的模塊&#xff0c;必須從堆棧跟蹤中獲取它。globals()-它將在writeToValues()函數的相同上下文中執行&#xff0c;因此它不會從“調用者”接收globals()。要糾正這種情況&#xff0c;您可以使…

嵌入式linux系統移植的四大步驟_嵌入式系統移植步驟

在嵌入式系統移植中重要的一部分是操作系統的移植&#xff0c;與其它操作系統相比&#xff0c;Linux大的特點&#xff1a;它是一款遵循GPL的操作系統&#xff0c;我們可以自由地使用、修改、和擴展它。正是由于這一特色&#xff0c;嵌入式系統移植過程中Linux系統受到越來越多人…

sdn框架的計算機網絡管理,清華SDN實踐--SDN 系統架構與數據中心應用

清華大學在SDN 的系統架構以及其在數據中心網絡中的應用方面展開了深入研究&#xff0c;主要研究成果包括&#xff1a;1. 以數據為中心的軟件定義網絡架構 SODA(Software Defined Data Centric Networking)。與 OpenFlow 相比&#xff0c;SODA 大大增強了數據層面的處理能力&am…

《軟件工程》課之-調查問卷的心得體會

1.這次調查是艱辛的。 2.很多人都誤以為我在發小廣告。。 3.很多人都不認識俄羅斯方塊1010這個游戲。 4.大家對于游戲的見解千奇百怪。 5.題目出的不是很完美&#xff0c;下次改進。。 6.簡單分析下結果&#xff0c;男孩子都喜歡多人的游戲&#xff0c;女孩的喜歡的多種多樣&am…

python循環語句for求和_for循環簡介

## for循環簡介for循環可以用來遍歷某一對象(遍歷&#xff1a;通俗點說&#xff0c;就是把這個循環中的第一個元素到最后一個元素依次訪問一次)。for循環的基本結構如下&#xff1a;![](https://img.kancloud.cn/75/33/753371a9536ed9eeb159074482ec85f0_558x174.png)說明&…

華為備份歷史版本_華為手機NAS備份時提示“需處于同一局域網”的解決方法

本內容來源于什么值得買APP&#xff0c;觀點僅代表作者本人 &#xff5c;作者&#xff1a;噩夢飄雷創作立場聲明&#xff1a;在使用華為手機向群暉NAS中備份時發現一直無法成功&#xff0c;經過一番研究找到了解決方案&#xff0c;希望能幫到大家~前言最近看了一位老哥的帖子&a…

計算機系統集成難點,企業MES實施中存在的難點及建議

MES是企業生產管理服務的核心信息化系統。實施MES是為了將現代企業生產管理思想、理念引入企業生產管理&#xff0c;對企業生產管理流程進行重組和優化&#xff0c;促進企業生產管理水平的提高。可是作用如此大的MES系統在實施過程中能一路無阻嗎&#xff1f;MES系統的作用1.車…

【原創】自己編寫的JavaGUI一鍵生成(hibernate/spring/mvc/maven)工具(附帶視頻教程源碼)...

為什么80%的碼農都做不了架構師&#xff1f;>>> 帶項目源碼&#xff08;https://git.oschina.net/qsyan/GeneratorFx&#xff09; app下載地址(附帶視頻教程)&#xff1a;http://download.csdn.net/detail/juyan2008/9769406 注明&#xff1a;此應用采用javafx編寫…

2018-2019 20165203 《信息安全系統設計基礎》第一周學習總結

2018-2019-1 20165203 《信息安全系統設計基礎》第一周學習總結 教材學習內容總結 編譯&#xff1a;gcc [選項] [文件名]選項參數表 參數對應功能-E僅執行編譯預處理-S將.c代碼轉換為匯編語言代碼-c僅執行編譯操作&#xff0c;不進行連接操作-o指定生成的輸出文件-I (大寫)指定…

普通計算機怎么算根號_大學專業介紹 | 計算機專業的真實就業情況

前兩天給大家簡單介紹了近些年比較火的計算機類相關專業具體都有哪些不同&#xff0c;以及就業時的行業或者崗位的側重點。今天呢我們繼續這個話題&#xff0c;來聊一聊整個計算機相關專業在學習和就業過程中大概是什么樣子的&#xff0c;希望能夠給大家提供一些實實在在的參考…

設計模式總結篇系列:工廠方法模式(Factory Method)

工廠方法模式適合于對實現了同一接口或繼承了同一父類的一些類進行實例的創建。一般是通過定義一個工廠類&#xff0c;并在其方法中實現對具有上述特點的類對象的創建。 根據具體產生類對象的方法定義形式&#xff0c;又可以將其分為普通工廠方法模式、多個工廠方法模式和靜態工…

高新園區到大連計算機學校,大連高新區中心小學

大連市高新區中心小學簡介&#xff1a;大連市高新區中心小學始建于2009年9月&#xff0c;是大連高新技術產業園區籌建的第一所直屬公辦學校。學校現擁有2000多名學生&#xff0c;87名教職員工。學校確定了“辦詩韻教育&#xff0c;讓每個孩子都幸福的教育理念”&#xff0c;通過…

java基礎之匿名內部類

內部類:   概述: 類里邊還有一個類, 里邊那個類叫內部類, 外邊那個類叫外部類.   分類:  成員內部類: 定義在成員位置的內部類.  局部內部類: 定義在局部位置的內部類. 格式:   new 類名或者接口名(){     //重寫類或者接口中 所有的 抽象方法;   };本質:  就…

0限流電阻 stm32_上/下拉電阻

除了前一節討論的拉電阻基本使用方法外&#xff0c;上拉電阻也可以提升高電平的電壓閾值&#xff0c;以便于前后級信號相匹配&#xff0c;比如&#xff0c;TTL邏輯電平驅動CMOS邏輯電平時&#xff0c;我們通常會添加一個上拉電阻R1&#xff0c;如下圖所示&#xff1a;But Why&a…

天地與我并存/萬物與我為一 2

http://blog.sina.com.cn/s/blog_17e792e010102y4lu.html 庖丁解牛 先秦&#xff1a;莊周 吾生也有涯&#xff0c;而知也無涯 。以有涯隨無涯&#xff0c;殆已&#xff01;已而為知者&#xff0c;殆而已矣&#xff01;為善無近名&#xff0c;為惡無近刑。緣督以為經&#xff0c…

網段和子網的區別_電焊石籠網與普通石籠網區別

對于石籠網&#xff0c;每個人都會想到在河中&#xff0c;橋梁附近和大壩上充滿石頭的籠子結構。今天&#xff0c;我們談論的是石籠網的一種電焊石籠網&#xff0c;它也是一種常見的石籠網&#xff0c;也被稱為六邊形石籠網。其功能與石籠網相同&#xff0c;但用法與普通石籠網…

jquery $(document).ready() 與window.onload的區別

轉載博客&#xff1a;http://www.jb51.net/article/21628.htm Jquery中$(document).ready()的作用類似于傳統JavaScript中的window.onload方法&#xff0c;不過與window.onload方法還是有區別的。 1.執行時間 window.onload必須等到頁面內包括圖片的所有元素加載完畢后…

小學三年級上冊計算機計劃,小學三年級數學上冊教學計劃

小學三年級數學上冊教學計劃一、班級情況分析這一學期我繼續擔任三年級數學教學工作&#xff0c;本班現有學生9人&#xff0c;其中男生3人&#xff0c;女生6人。三年級學生已經有兩年的數學學習經歷&#xff0c;對一些基礎性的數學知識有了初步的認識。學生已經比較習慣于新教材…