在做语义分割是,第一步需要查看数据集,比较训练集与测试集之间的差异,图像与图像之间的差异。
数据集之间比较
对于数据集之间的差异,可以通过统计他们各自的直方图进行比较。
import os
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
def image_hist(img_dir):
colors = ['blue', 'green', 'red']
img_name_list = os.listdir(img_dir)
hists = np.zeros((3, 256, 1))
for img_name in tqdm(img_name_list):
img_path = os.path.join(img_dir, img_name)
image = cv.imread(img_path)
for i, color in enumerate(colors):
# 三个通道
hist = cv.calcHist([image], [i], None, [256], [0, 256])
hists[i] += hist
for i, color in enumerate(colors):
plt.plot(hists[i], color=color)
plt.show()
if __name__ == '__main__':
img_dir = r'F:\competition\tianzhibei\val\Image1'
image_hist(img_dir)
通过分析两幅图像相同颜色折线走势、极值点、平滑程度,来判断数据集之间的差异。
数据之间比较
同样,也可以通过直方图进行比较,但当数据很多时,人力去比较是不现实的,这时我们需要引入其他方法,来快速比较两个直方图,并给出他们之间差异大小,具体可以参考。
数据处理
对于差异较大的个别数据,可以使用直方图匹配进行矫正,参考