度量变换+图像拼接+检测深度图【国科大图像处理实验】

文章目录

  • 实验一
    • 具体实现
    • 实验结果
  • 实验二
    • 具体实现
    • 实验结果
  • 实验三
    • 具体实现
    • 实验结果


实验一

问题描述:目录hw1下的图像是一些胶片的照片,请将其进行度量矫正。

具体实现

采用Canny算子,检测边缘点,参数的设置不能太大也不能太小,这个很关键;

# 读取图像
image=r'./hw1/4.jpeg'
img = cv.imread(image)

# 灰度化处理图像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 高斯滤波降噪
gaussian = cv.GaussianBlur(grayImage, (11, 11), 0) 
# Canny算子
Canny = cv.Canny(gaussian, 80, 120)

采用Hough直线检测,根据边缘点检测胶片边缘对应的4条直线,有时会有多余的直线存在,所以在计算交点时要进行筛选;

# hough_p:
lines_p = cv.HoughLinesP(Canny, rho = 10, theta = np.pi/180, threshold = 150, minLineLength= 250, maxLineGap=10)

for i in range(len(lines_p)):
    x_1, y_1, x_2, y_2 = lines_p[i][0]
    cv.line(img_p, (x_1, y_1), (x_2, y_2), (0, 255, 0), 2)
print("code successful!")

由4条直线在图像平面中的交点为胶片图像的4个 顶点;

for x1, y1, x2, y2 in lines[:]:
    for x3,y3,x4,y4 in lines[:]:
        point_is_exist, [x, y]=cross_point([x1, y1, x2, y2],[x3,y3,x4,y4])
        if point_is_exist and (int(y) > 150) and (int(x) < 3000):    #剔除多余点!
            list_image.append((int(x),int(y)))
            cv.circle(img_p2,(int(x),int(y)),5,(0,0,255),3)

根据4个 顶点与真实世界中胶片的位置得到两个平面之间的单应变换矩阵;并根据单应变换矩阵实现图像矫正

dst_point = np.array([[dsize[0]-1,0],[0,0],[0,dsize[1]-1],[dsize[0]-1,dsize[1]-1]])
h, s = cv.findHomography(src_point, dst_point, cv.RANSAC, 10)   
img = cv.warpPerspective(img_p2, h, dsize)
img = cv.cvtColor(img, cv.COLOR_RGB2BGR)

注:由于每张图都不一样,canny的参数以及Hough直线检测的参数会有一定程度影响实验结果,为了得到更好的实验结果分别对每张图片进行了调参。

实验结果

原图像:度量变换+图像拼接+检测深度图【国科大图像处理实验】_第1张图片
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第2张图片
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第3张图片

处理后图像:
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第4张图片
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第5张图片
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第6张图片


实验二

问题描述:目录hw2下有两幅学校的照片,请根据课程中讲述图像拼接方法,将这两幅图像拼接成一幅大的图像。

具体实现

1.对每幅图做特征提取,根据提取到的特征点对两幅图做特征匹配。
2.图像配准及误匹配点的去除,即根据匹配的特征点找出重叠部分的对应坐标,并求出对应坐标转换的矩阵homography。
3.根据转换矩阵将右图拷贝到左图的指定位置上。
4.对重叠的边界做特殊处理,如平滑处理、去裂缝处理、过渡等。

实验结果

原图像:
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第7张图片度量变换+图像拼接+检测深度图【国科大图像处理实验】_第8张图片

处理后图像:
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第9张图片


实验三

问题描述:目录hw3下有立体视觉对应的两幅图像view1.png和view5.png,图像来源于http://vision.middlebury.edu/stereo/data/。请计算出这两幅图像对应场景的深度。。

具体实现

极线校正:校正的目的是使两帧图像极线处于水平方向,或者说是使两帧图像的光心处于同一水平线上。

  1. 由标定得到的内参中畸变信息中可以对图像去除畸变
  2. 通过校正函数校正以后得到相机的矫正变换R和新的投影矩阵P,接下来是要对左右视图进行去畸变,并得到重映射矩阵。
  3. 根据上述得到的重映射参数map1,map2,我们需要进一步对原始图像进行重映射到新的平面中才能去除图像畸变。

特征匹配:这里便是我们利用NCC做匹配的步骤啦,匹配方法如上所述,右视图中与左视图待测像素同一水平线上相关性最高的即为最优匹配。完成匹配后,我们需要记录其视差d,即待测像素水平方向xl与匹配像素水平方向xr之间的差值d = xr - xl,最终我们可以得到一个与原始图像尺寸相同的视差图D。

深度恢复:通过上述匹配结果得到的视差图D,我们可以很简单的利用相似三角形反推出以左视图为参考系的深度图。

实验结果

原图像:
度量变换+图像拼接+检测深度图【国科大图像处理实验】_第10张图片度量变换+图像拼接+检测深度图【国科大图像处理实验】_第11张图片

得到的深度图:度量变换+图像拼接+检测深度图【国科大图像处理实验】_第12张图片

你可能感兴趣的:(图像处理,计算机视觉,opencv)