通常来说计算语义分割的评价指标时需要有两个文件,1、模型输出结果。2、真值
而stone331 数据集中有如下三个文件
介绍如下:
文件夹1的第一张图片为模型输入图片(image1):
文件夹2的第一张图片为真值(gt1):
文件夹3的第一张图片为一个蒙版图片(mask1):
由于原图有白边,对预测结果有影响(除了预测出了裂缝,还包括上下的白边),所以预测结果如下(prediction1):
这对计算评价指标肯定有较大的影响,因此利用mask1去除prediction1的白边,得到和gt1那样正常的只含有裂缝的图片。
代码如下:
img1=cv.imread('738.png')#读取prediction1
print(img1.shape)
img2=cv.imread('738.bmp')#读取gt1
print(img2.shape)
r,img3=cv.threshold(img2,127,255,cv.THRESH_BINARY_INV)#将gt1反阈值化
print(img3.shape)
cv.imwrite('img3.png',img3)#保存
对mask1反阈值化后得到 img3如下:
下面执行相加操作:prediction1+img3=img4
# img=cv.addWeighted(img1,1,img2,1)
img4=cv.add(img1,img3)
cv.imwrite('img4.png',img4)
接下来需要把img4外面的白色变成黑色,这时利用mask1,只需要找出mask1黑色部分(像素为0)的坐标,然后把img4中相应位置的像素也变成黑色即可
利用numpy找出这些index
img5=img4#复制一份
l=np.where(img2<20)#找出黑色的坐标 判断条件只要大于0即可
print(l)
print(len(l))#为3,分别为 h w c
输出如下:
(array([ 0, 0, 0, ..., 511, 511, 511], dtype=int64), array([ 0, 0, 0, ..., 511, 511, 511], dtype=int64), array([0, 1, 2, ..., 0, 1, 2], dtype=int64))
3
接下来把index转换成图片中的像素坐标
index=list(zip(l[0],l[1],l[2]))
print(index)
输出如下:
把img4中相应位置变成黑色,代码如下:
for i in index:
img5[i]=0
cv.imwrite('img5.png',img5)
批量相加 完整代码如下:
import cv2 as cv
import numpy as np
import os
prediction=r'D:\Crack_code\modecode-attention\\U2Net-Attention\\test_data\Stone 331\\U2Net_ECA_AS-pre\\'#预测图片路径
mask='D:\\Crack_code\\modecode-attention\\U2Net-Attention\\test_data\Stone 331\Stone331_mask\\'#掩膜路径
add_results='D:\\Crack_code\\modecode-attention\\U2Net-Attention\\test_data\Stone 331\\add_results\\'#保存最后结果的路径
prediction_name=[]
for f in os.listdir(path=prediction):
# print(f)
prediction_name.append(f.strip('png'))
print(prediction_name)
for name in prediction_name:
img1 = cv.imread(prediction+name+'png')
# print(img1.shape)
img2 = cv.imread(mask+name+'bmp')#虽然gt是单通道 但是opencv默认读取成3通道,所以img1.shape1==img2.shape
# print(img2.shape)
r, img3 = cv.threshold(img2, 127, 255, cv.THRESH_BINARY_INV)#对mask取反
img4 = cv.add(img1, img3)
img5=img4
#找索引
l = np.where(img2 < 20)
index = list(zip(l[0], l[1], l[2]))
for i in index:
img5[i]=0
cv.imwrite(add_results+name+'bmp',img5)