概述
需要人工合成一个数据集,在指定的图像上绘制圆形和矩形的“缺陷”,并根据绘制的缺陷产生相应的ground truth.为了一定程度上模拟真实的缺陷图像数据,我们在合成的缺陷图像上添加了椒盐噪声和高斯噪声。程序可以指定需要绘制的矩形和圆形的个数,Matlab代码如下:
%用来产生合成缺陷数据集
clc;
clear;
imgDir='./Reference/';
resDir1='./SyntheticDefect/';
resDir2='./SyntheticGT/';
mkdir(resDir1);
mkdir(resDir2);
D=dir(imgDir);
imgType=D(3).name(end-2:end);
D=dir([imgDir '*.',imgType]);
numImg=numel(D);
for imgIndex=1:numImg
imgFile=strcat(imgDir,D(imgIndex).name);
img=double(rgb2gray(imread(imgFile)));
[m,n]=size(img);
recGT=zeros(m,n);
cirGT=zeros(m,n);
synDefect=img;
recPrompt = 'Input the number of rectangles:';
recNum = input(recPrompt);%据传input只能一次读入一个
cirPrompt = 'Input the number of circles:';
cirNum = input(cirPrompt);
figure,imshow(img,[]);
for i=1:recNum
recDefect = drawrectangle(gca,'Color',[0 0 0],'FaceAlpha',1,'linewidth',1);
recPos=recDefect.Position;
recX=recPos(1);recY=recPos(2);width=recPos(3);height=recPos(4);
recGT(recY:recY+height,recX:recX+width)=1;%注意纵横坐标和图像长宽之间的对应关系
end
for i=1:cirNum
cirDefect=drawcircle(gca,'Color',[0 0 0],'FaceAlpha',1,'linewidth',1);
cirX=cirDefect.Center(1);cirY=cirDefect.Center(2);cirR=cirDefect.Radius;
[x,y] = meshgrid(1:m,1:n);
tmp= (x - cirX).^2 + (y - cirY).^2 <= cirR^2;
cirGT=tmp|cirGT;
end
GT=recGT|cirGT;
synDefect(GT==1)=0;
%先对缺陷区域添加椒盐噪声
salt_pepper_img=zeros(m,n);
salt_pepper_img=imnoise(salt_pepper_img,'salt & pepper',0.05); %加入椒盐躁声
salt_pepper_img(GT~=1)=0;
synDefect=synDefect+255*salt_pepper_img;%
%对整幅图像添加高斯噪声
SNR=10+(50-10)*rand();%随机生成10-50dB
synDefect = awgn(synDefect,SNR);
imwrite(uint8(synDefect),strcat(resDir1,D(imgIndex).name));
imwrite(GT,strcat(resDir2,D(imgIndex).name));
close all;
end
生成图像示例如下:
如果该代码对您有帮助,欢迎小额赞赏。您的鼓励至关重要!
最后
以上就是感动酸奶为你收集整理的Matlab手工拖动鼠标绘制矩形和圆形并产生GroundTruth的全部内容,希望文章能够帮你解决Matlab手工拖动鼠标绘制矩形和圆形并产生GroundTruth所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复