給數據集進行像素級的標註並存爲 .mat 文件

給數據集進行像素級的標註並存爲 .mat 文件

博主此篇博文是關於裂縫檢測的數據集標註,原始數據是一篇關於裂縫檢測的論文提供的,現在博主需要使用自己的數據來做實驗。

處理方法爲:ps+matlab

論文數據集如下:1爲非裂縫像素,2爲裂縫像素

在這裏插入圖片描述

不過爲了方便,博主將非裂縫像素標爲 0,裂縫像素標爲1;

採集的圖片:

在這裏插入圖片描述

使用Photoshop對圖片標註

  1. 使用“快速選擇工具” 框出裂縫的區域

ctrl + space 拖拽屏幕可放大,縮小圖片

alt + 按住鼠標右鍵 移動鼠標可 放大,縮小工具的範圍

在這裏插入圖片描述

  1. 對框出的裂縫區域進行處理:

shift 爲擴大邊界

alt 爲縮小邊界

在這裏插入圖片描述

  1. 保存剪切好的圖層、刪除背景圖層並添加純色圖層(黑色)

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章