计算机视觉 实验二 图像增强
一、实验目的
- 图像的二值化处理;
- 分段线性变换;
- 均值滤波;
- sobel锐化;
实验仪器
Python、OpenCV、Matlab
二、实验内容及要求
1.获取实验用图像:GIL.jpeg,使用cv2.imread()函数将图像读入, 利用cv2. threshold(src, thresh, maxval, type[, dst])对输入的图像进行二值化处理,并通过设置不同的type值,讨论每种取种对图像效果的影响。
2. 产生灰度变换函数T1,使得:
0.3r r < 0.35
s = 0.105 + 2.6333(r-0.35) 0.35 ≤ r ≤ 0.65
1 + 0.3(r-1) r > 0.65
用T1对原图像rice.jpg进行处理,显示处理前、后的图像(r,s为归一化灰度)。
3. 对lena.bmp图像分别做33、55、77、99的均值滤波,并分析模板的大小对图像质量的影响。
4. 对lena.bmp图像做sobel锐化。
三、 实验程序
实验内容1:图像的二值化处理
设置了不同的type值:BINARY阈值,BINARY_INV阈值,TRIANGLE自适应阈值,OTSU自适应阈值,TRUNC截断阈值,TOZERO归零阈值
import cv2 as cv
def threshold_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 230, 255, cv.THRESH_BINARY)
print("BINARY阈值:%s" % ret)
cv.imshow("BINARY", binary)
ret, binary = cv.threshold(gray, 230, 255, cv.THRESH_BINARY_INV)
print("BINARY_INV阈值:%s" % ret)
cv.imshow("BINARY_INV_230", binary)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_TRIANGLE)
# ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE) print("TRIANGLE自适应阈值:%s" % ret)
cv.imshow("TRIANGLE", binary)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)
print("OTSU自适应阈值:%s" % ret)
cv.imshow("OTSU", binary)
ret, binary = cv.threshold(gray, 200, 255, cv.THRESH_TRUNC)
print("TRUNC截断阈值:%s" % ret)
cv.imshow("TRUNC_200", binary)
ret, binary = cv.threshold(gray, 100, 255, cv.THRESH_TOZERO)
print("TOZERO归零阈值:%s" % ret)
cv.imshow("TOZERO_100", binary)
src1 = cv.imread("images4Exp2/GIL.jpeg")
cv.imshow("GIL", src1)
threshold_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()
实验内容2:分段线性变换
%matlab语言
a=imread('rice.jpg');
figure;
title('原图');
axis on;
imshow(a);
a=double(a)/256;
figure,imhist(a),title('原直方图');
axis on;
%r=[0:0.001:1];
%s1=[r<0.35].*r*0.3+[r<=0.65].*[r>=0.35].*(0.105+2.6333*(r-0.35))+[ r>0.65].*(1+0.3*(r-1));
a1=[a<0.35].*a*0.3+[a<=0.65].*[a>=0.35].*(0.105+2.6333*(a-0.35)) +[a>0.65].*(1+0.3*(a-1));
figure,imshow(a1),title('改后一');
axis on;
figure,imhist(a1),title('改后直方图一');
axis on;
imwrite(a1,'改后rice一.jpg');
实验内容3:均值滤波
%实验3:均值滤波
import cv2 as cv
import numpy as np
import math
import copy
def spilt( a ):
if a/2 == 0:
x1 = x2 = a/2
else:
x1 = math.floor( a/2 )
x2 = a - x1
return -x1,x2
def original (i, j, k,a, b,img):
x1, x2 = spilt(a)
y1, y2 = spilt(b)
temp = np.zeros(a * b)
count = 0
for m in range(x1, x2):
for n in range(y1, y2):
if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:
temp[count] = img[i, j, k]
else:
temp[count] = img[i + m, j + n, k]
count += 1
return temp
def average_function(a,b,img):
img0=copy.copy(img)
for i in range(0,img.shape[0]):
for j in range(2,img.shape[1]):
for k in range (img.shape[2]):
temp = original(i, j, k, a, b, img0)
img[i,j,k] = int ( np.mean(temp))
return img
def main():
img0 = cv.imread(r"images4Exp2/lena.bmp")
#(3,3)滤波器大小
ave_img3= average_function( 3 , 3, copy.copy(img0) )
cv.imshow("3*3 Mean filtering",ave_img3)
#(5,5)滤波器大小
ave_img5= average_function(5,5, copy.copy(img0) )
cv.imshow("5*5 Mean filtering",ave_img5)
#(7,7)滤波器大小
ave_img7= average_function(7,7, copy.copy(img0) )
cv.imshow("7*7 Mean filtering",ave_img7)
#(9,9)滤波器大小
ave_img9= average_function(9,9,copy.copy(img0) )
cv.imshow("9*9 Mean filtering",ave_img9)
cv.imshow("original",img0)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == "__main__":
main()
实验内容4:sobel锐化
import cv2
import numpy as np
#导入图片
img=cv2.imread('images4Exp2/lena.bmp')
#转换灰度
gimg=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#sobel算子锐化
#对x方向梯度进行sobel边缘提取
x=cv2.Sobel(gimg,cv2.CV_64F,1,0)
#对y方向梯度进行sobel边缘提取
y=cv2.Sobel(gimg,cv2.CV_64F,0,1)
#对x方向转回uint8
absX=cv2.convertScaleAbs(x)
#对y方向转会uint8
absY=cv2.convertScaleAbs(y)
#x,y方向合成边缘检测结果
dst1=cv2.addWeighted(absX,0.5,absY,0.5,0)
#按要求左右显示原图与sobel处理结果
image=np.hstack([gimg,dst1])
cv2.imshow('sobelres',image)
#去缓存
cv2.waitKey(0)
cv2.destroyAllWindows()
四、实验结果记录
实验一 图像的二值化处理结果:
使用不同的type类型得到的结果也不一样,其中BINARY_INV阈值得到的图片效果最差,TOZERO归零阈值得到的图片效果最好。
BINARY阈值:230.0
BINARY_INV阈值:230.0
TRIANGLE自适应阈值:90.0
OTSU自适应阈值:130.0
TRUNC截断阈值:200.0
TOZERO归零阈值:100.0
实验二 分段线性变换结果:
经过分段线性变换后,处理后的图像比处理前的图像特征更明显。
实验三 均值滤波结果:
根据图像结果,随着模板的增大,图像越来越模糊,图像质量越来越差。
实验四 sobel锐化结果:
显示了原图和sobel锐化后的图。
五、附实验用图片下载
1.百度网盘下载链接:链接:https://pan.baidu.com/s/1WzkWNuOaldYeVCd5e40w2g
提取码:zb2t