目錄
一、題目
1、問題描述
2、問題分析
二、實驗過程
1、中值濾波
2、分段線性變換
3、圖像增強
三、實驗結果
四、代碼
一、題目
1、問題描述
對于下面這幅圖像,請問可以通過那些圖像增強的手段,達到改善視覺效果的目的?請顯示處理結果,并附簡要處理流程說明。
2、問題分析
若想改善圖檔的品質,我們需要去除其中的噪聲。圖檔輪廓不清晰,我們将其銳化即可。
下面簡單介紹一下處理過程中遇到的問題及解決方法:
問題 | 解決方法 |
噪聲 | 中值濾波 |
各地區顔色不分明,模糊 | 分段線性變換 |
邊界不清晰,棱角不分明 | 圖像銳化 |
二、實驗過程
1、中值濾波
(1)函數
medianblur(src , dst , size)
(2)參數說明
src:表示原始圖像
dst:表示處理後的圖像
size:孔徑線性尺寸(必須是大于1的奇數)
(3)函數功能
使用中值濾波來平滑圖像,圖像去噪
2、分段線性變換
(1)函數
SLT(image, x1, x2, y1, y2)
(2)參數說明
Image : 原始圖像
(3)函數功能
使圖像有更好的目視效果或突出有用的資訊,提高圖像品質和突出所需資訊
3、圖像增強
(1)函數
filter2d(img_path)
(2)參數說明
img_path: 輸入圖檔路徑
(3)函數功能
是使圖像邊緣更清晰的一種圖像處理方法
三、實驗結果
1、灰階圖
2、中值濾波
3、分段線性變換
4、圖像銳化
5、效果對比圖
四、代碼
1、medianBlur.py
import cv2
# 讀取圖檔
img = cv2.imread('img0.png')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 中值濾波
img1 = cv2.medianBlur(img,3)
# 顯示并儲存圖檔
cv2.imshow('pre_img',img)
cv2.imshow('medianBlur',img1)
cv2.imwrite('img1.jpg', img1)
cv2.waitKey(0)
2、SLT.py
import numpy as np
import cv2 as cv2
# 讀取圖檔
img = cv2.imread('img1.jpg')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
def SLT(img, x1, x2, y1, y2):
lut = np.zeros(256)
for i in range(256):
if i < x1:
lut[i] = (y1 / x1) * i
elif i < x2:
lut[i] = ((y2 - y1) / (x2 - x1)) * (i - x1) + y1
else:
lut[i] = ((y2 - 255.0) / (x2 - 255.0)) * (i - 255.0) + 255.0
img2 = cv2.LUT(img, lut)
img2 = np.uint8(img2 + 0.5)
return img2
# 分段線性變換
img2 = SLT(img, 80, 150, 50, 230)
# 顯示并儲存圖檔
cv2.imshow('SLT', img2)
cv2.imwrite('img2.jpg', img2)
cv2.waitKey(0)
3、filter2d.py
import cv2 as cv2
import numpy as np
# 讀取圖像
img = cv2.imread('img1.jpg')
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img0 = cv2.imread('img0.png')
img0 = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
def filter2d(img_path):
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
img3 = cv2.filter2D(img, -1, kernel)
return img3
# 圖像銳化
img3 = filter2d(img)
merge = np.hstack((img0,img3))
# 顯示并儲存圖像
cv2.imshow('filter2D', img3)
cv2.imwrite('img3.jpg',img3)
cv2.imshow('merge',merge)
cv2.imwrite('merge.jpg',merge)
cv2.waitKey(0)