天天看點

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

目錄

一、題目

1、問題描述

2、問題分析

二、實驗過程

1、中值濾波

2、分段線性變換

3、圖像增強

三、實驗結果

四、代碼

一、題目

1、問題描述

對于下面這幅圖像,請問可以通過那些圖像增強的手段,達到改善視覺效果的目的?請顯示處理結果,并附簡要處理流程說明。

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

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、灰階圖

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

2、中值濾波

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

3、分段線性變換

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

4、圖像銳化

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

5、效果對比圖

圖像增強——數字圖像處理(python實作)一、題目二、實驗過程三、實驗結果四、代碼

四、代碼

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)
           

繼續閱讀