图像质量客观评价 新增可见边 代码
时间: 2023-07-23 15:09:38 浏览: 47
以下是Python代码示例,可用于评估图像质量中可见边的情况:
```python
import cv2
import numpy as np
def visible_edge(img1, img2):
# 将图像转换为灰度
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算Sobel滤波器响应
sobelx1 = cv2.Sobel(gray1, cv2.CV_64F, 1, 0, ksize=5)
sobely1 = cv2.Sobel(gray1, cv2.CV_64F, 0, 1, ksize=5)
sobel1 = np.sqrt(sobelx1 ** 2 + sobely1 ** 2)
sobelx2 = cv2.Sobel(gray2, cv2.CV_64F, 1, 0, ksize=5)
sobely2 = cv2.Sobel(gray2, cv2.CV_64F, 0, 1, ksize=5)
sobel2 = np.sqrt(sobelx2 ** 2 + sobely2 ** 2)
# 计算L1范数
diff = np.abs(sobel1 - sobel2)
l1_norm = np.sum(diff)
# 计算可见边比例
threshold = 20
edges1 = cv2.Canny(gray1, threshold, threshold * 2)
edges2 = cv2.Canny(gray2, threshold, threshold * 2)
visible_edges = np.sum(edges1 & edges2) / np.sum(edges1 | edges2)
return l1_norm, visible_edges
```
该函数接受两个输入图像,返回两个指标:L1范数和可见边比例。L1范数用于衡量两个图像的边缘响应之间的差异,可见边比例用于衡量两个图像中可见边的数量。
使用示例:
```python
img1 = cv2.imread('img1.png')
img2 = cv2.imread('img2.png')
l1_norm, visible_edges = visible_edge(img1, img2)
print("L1 norm: ", l1_norm)
print("Visible edges: ", visible_edges)
```
请注意,此代码示例仅考虑了可见边的情况,还有其他更全面的图像质量评估指标可供选择。