给数据集进行像素级的标注并存为 .mat 文件
博主此篇博文是关于裂缝检测的数据集标注,原始数据是一篇关于裂缝检测的论文提供的,现在博主需要使用自己的数据来做实验。
处理方法为:ps+matlab
论文数据集如下:1为非裂缝像素,2为裂缝像素
不过为了方便,博主将非裂缝像素标为 0,裂缝像素标为1;
采集的图片:
使用Photoshop对图片标注
- 使用“快速选择工具” 框出裂缝的区域
ctrl + space 拖拽屏幕可放大,缩小图片
alt + 按住鼠标右键 移动鼠标可 放大,缩小工具的范围
- 对框出的裂缝区域进行处理:
shift 为扩大边界
alt 为缩小边界
- 保存剪切好的图层、删除背景图层并添加纯色图层(黑色)
ctrl + j(保存图层)
保存图片到本地
使用matlab 处理图片
% 图片所在文件夹路径
imgPath = "./";
% .mat文件保存路径
matSavePath = "./mat2/";
% 获取图片路径
imgDir = dir(strcat(imgPath,"*.jpg"));
for i = 1:length(imgDir)
%读取图片
img = imread(imgPath+imgDir(i).name);
% 获取R通道的数据
B = img(:,:,1);
C = img(:,:,1);
% 将数据转成 csv
csvwrite(matSavePath+imgDir(i).name + ".csv",C);
% 取数值在 40< B < 130 的下标
ind = ( B > 40 & B < 130);
% 置 1
B(ind) = 1;
% 置 0
B(~ind) = 0;
% 保存为 .mat 文件
save(matSavePath+imgDir(i).name+".mat","B","B");
end
程序中为什么取数值在 40 < b < 130之间?
我们将数组存为.csv 文件,用excel 打开,从下图中颜色较深的地方可以看出,这是我们截出的裂缝区域
如果放大看的话,中心区域的数据大多位于该区间,中心区域即为裂缝像素,因此选择该区间内的数值为裂缝像素
显示图片
# coding=utf-8
// python 代码
import scipy.io as sio
import matplotlib.pyplot as plt
mat_data = sio.loadmat("I:/1裂缝检测/自己的数据集/code/mat2/001.jpg.mat")
mat_data = mat_data["B"][:]
# print(mat_data)
plt.imshow(mat_data,cmap=plt.cm.gray,interpolation='nearest')
从上面的方法来看,我们的图片的精度并不是很高,但也能显示出较好的裂缝纹理,若要更高的精度,可能需要新建纯色图层(黑色),调节透明度,用铅笔工具把裂缝区域描述出来,不过工作量会很大。
额外代码
修改图片尺寸(python)
import cv2
import os
path = os.listdir("./cut/")
print(path)
fileList = [pathName for pathName in path if pathName.endswith(".jpg")]
print(fileList)
for file in fileList:
print("./cut/"+file)
im1 = cv2.imread("./cut/"+file)
print(im1)
im2 = cv2.resize(im1, (480,320), interpolation=cv2.INTER_CUBIC)
cv2.imwrite('./resizeImage/'+file, im2)