Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用opencv和python计算区域相关图_Python_Opencv_Image Processing_Correlation - Fatal编程技术网

用opencv和python计算区域相关图

用opencv和python计算区域相关图,python,opencv,image-processing,correlation,Python,Opencv,Image Processing,Correlation,所以我在做一个图像处理项目,我的目标是使用SIFT和仿射变换检测图像上的重复区域,我已经达到了正确的关键点匹配和仿射变换矩阵的程度 然后我现在坚持这一步,我需要使用这2幅图像生成2幅相关位图,这是我在仿射变换后得到的: 这两张是我处理的图像: 所以我需要一些帮助,我可以做这一步我尝试了,但不幸的是,我失败了。 我尝试了滑动窗口两个图像,我采取了5x5像素,这意味着 也许我做错了,我知道滑动窗很糟糕,但我现在只是在尝试。 这是我到目前为止得到的,但我需要相反的结果 我试过这个 #用零填充

所以我在做一个图像处理项目,我的目标是使用SIFT和仿射变换检测图像上的重复区域,我已经达到了正确的关键点匹配和仿射变换矩阵的程度

然后我现在坚持这一步,我需要使用这2幅图像生成2幅相关位图,这是我在仿射变换后得到的:

这两张是我处理的图像:

所以我需要一些帮助,我可以做这一步我尝试了,但不幸的是,我失败了。 我尝试了滑动窗口两个图像,我采取了5x5像素,这意味着 也许我做错了,我知道滑动窗很糟糕,但我现在只是在尝试。 这是我到目前为止得到的,但我需要相反的结果

我试过这个

#用零填充的黑色图像
空白图像=np.0((h,w,1),np.uint8)
对于范围(0,h-4)内的y:
对于范围(0,w-4)内的x:
窗口1=图像灰度[y:y+5,x:x+5]
window2=wrapAffine\u img[y:y+5,x:x+5]
a1=窗口1[3][3]
a2=窗口2[3][3]
平均值1=cv2。平均值(窗口1)
平均值2=cv2。平均值(窗口2)
平均值1_num=平均值1[0]
平均数2_num=平均数2[0]
b1=a1-平均数1
b2=a2-平均数2
顶部=(b1*b2)
底部=数学sqrt((b1*b1)*(b2*b2))
如果底部>0:
打印(顶部/底部)
强度=顶部/底部
空白图像[y+2,x+2]=强度
elif底部最小匹配计数:
src_pts=np.float32([keypoints[m.trainIdx].pt表示m处于良好匹配状态])
dst_pts=np.float32([keypoints[m.queryIdx].pt表示m处于良好匹配状态])
retval,inliers=cv2.estimateAffine2D(src_pts,dst_pts,method=cv2.RANSAC,ransacreprojectthreshold=3,maxIters=100,
置信度=0.99)
matchesMask=inliers.ravel().tolist()
#5.5)带RANSAC的过滤器
最终比赛=[]
对于范围内的i(len(良好匹配)):
如果matchesMask[i]==1:
最终匹配。追加(良好匹配[i])
#5.3.1)在图像上画线和圆(可选)
#灰度图像转换为RGB图像
img_RGB=cv2.CVT颜色(img_灰色,cv2.COLOR_灰色2RGB)
列表_点1=[]
列表_点2=[]
对于决赛中的j:
#获取每个图像的匹配关键点
点1=j.trainIdx
点2=j.queryIdx
#获取坐标,x列,y行
(x1,y1)=关键点[point1].pt
(x2,y2)=关键点[point2].pt
#附加到每个列表
list_point1.append((int(x1),int(y1)))
list_point2.append((int(x2),int(y2)))
#在两个坐标处画一个小圆圈:半径4,绿色,厚度=1
#复制关键点圆
圆(img_RGB,(int(x1),int(y1)),4,(0,255,0),1)
#原始关键点圆
圆(img_RGB,(int(x2),int(y2)),4,(0,255,0),1)
#在两点之间画一条线,厚度=1,颜色为绿色
cv2.直线(img_RGB,(int(x1),int(y1)),(int(x2),int(y2)),(0255,0),1)
#6)计算区域相关图
#6.1)拉帕芬
wrapAffine_img=cv2.翘曲仿射(img_gray,retval,(w,h))
cv2.imwrite('res.png',wrapAffine\u img)
#3)产量
cv2.imshow(“结果”,res)
cv2.imwrite('final_matches.png',res)
#cv2.imshow(“相关性”,img\U相关性图)
cv2.等待键(0)
cv2.destroyAllWindows()

Hi Kis。请在代码中给出一个最小的可重复样本和清晰的问题定义。我编辑了我的问题,为了清楚起见,我有两张图片,我想用图片上的公式计算区域相关图。