matlab-对数据集加噪声并实现tsne可视化

matlab-对数据集加噪声并实现tsne可视化

最近才知道,原来可以不用模型,也能实现对数据集数据的可视化。

**一、**以COIL-100数据集为例子。

问题:
前提:首先对COIL-100数据集根据角度0°-175°和180°-255°,分别划分成C1,C2两个子数据集。
目的:
①实现C1-C2的tsne可视化;
②对COIL-100数据集添加遮挡物,实现C1-C2的tsne可视化。
平台:
matlabR2019b 以及 Pycharm2022

**

二、解决方法

**
(1)首先获取得到我们的COIL-100的数据集,以及划分好的C1,C2数据集:
在这里插入图片描述

(2)----------对数据集图片添加遮挡物----------
分别对COIL-100-1和COIL-100-2数据集添加遮挡物
我借鉴了这个博客数据增强-在图片中添加遮挡物
这个博客是对数据集添加不规则的五边形,我自己改成了:添加长方体遮挡物,且位置随机,python代码如下:

import random

import itertools

import os
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw

# 原始图片的存放位置
PATH = 'C:/Users/lenovo/Documents/MATLAB/COIL-Augment-tsne/data/COIL-100/'
# 新生成的图片的保存位置
SAVE_PATH= 'C:/Users/lenovo/Documents/MATLAB/COIL-Augment-tsne/data/COIL-100-noise-10x10/'
# 要在图片上生成几边形的物体,N=5代表五边形
N = 4


def drawObs(path, savePath, n):

    for file in os.listdir(path):
        if not file.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')):
            continue
        img = Image.open(path + file)
        (x, y) = img.size
        random_list = list(itertools.product(range(1, x), range(1, y)))
        points = random.sample(random_list, n)

        draw = ImageDraw.Draw(img)
        x = random.randint(0, 255)
        #ImageDraw.ImageDraw.polygon(xy=points, fill=(x1, x2, x3), self=draw)
        draw.rectangle((x,x,x+20,x+10),fill=(0,0,0))
        img.save(savePath + 'rand' + file)
        print(file)

if __name__ == '__main__':
    drawObs(PATH, SAVE_PATH, N)



于是,我们得到 添加了随机遮挡物的C1和C2数据集:COIL-100-agument-1和COIL-100-agument-2.
在这里插入图片描述

(3)----------数据集转换为.mat文件----------
分别将COIL-100-1, COIL-100-2, COIL-100-agument-1 和 COIL-100-agument-2,四个数据集转换成.mat文件。
.png向.mat文件转换的代码,我借鉴了这个博客将COIL数据集转换成.mat文件

clear
clc
path = 'D:\COIL\coil-100\';     %源数据集路径
save_path = 'D:\COIL\';     %处理之后保存的路径
file = dir([path,'*.png']);     %列出源路径下所有.png文件的信息:name date bytes...

COIL = [];
Label = [];
for i = 1:length(file)      %源路径下png文件的个数
    %%
    %%对图片本身数据做处理
    image0 = imread([path,file(i).name]);       %读取某一张图片
    str = file(i).name;     %图片名保存为str
    image1 = rgb2gray(image0);      %将彩图转换为灰度图像
    image2 = im2double(image1);     %将图片中unit8转换为double
    [a,b] = size(image2);       %a为图片行数 b为图片列数
    image3 = reshape(image2,1,a*b);     %将a*b的图片转换为1行
    COIL = [COIL;image3];       %每一张图片都加载在上一张图片的下一行
    fprintf('%d th starting...\n',i);       %记录程序运行过程
    %%
    %%对图片标签做处理 图片名为‘obj(类标签)__(拍摄角度).png’
    %主要提取类标签
    LabelStart = strfind(str,'j');      %找到图片名‘j’的位置(类标签前)
    LabelEnd = strfind(str,'_');        %找到图片名‘__’的位置(类标签后)
    label_temp = str2double(str(LabelStart+1:LabelEnd(1,1)-1));     %提取出图片类标签
    Label = [Label;label_temp];     %每个类标签按顺序排排坐
end

save savepath COIL Label

注意:
①保存的COIL-100-1 和 COIL-100-augment-1 图片保存为X_src,图片标签保存为Y_src,即上述代码中的COILLabel
②保存的COIL-100-2 和 COIL-100-augment-2 图片保存为X_tar,图片标签保存为Y_tar,即上述代码中的COILLabel

即生成的.mat文件如下图所示:
在这里插入图片描述
在这里插入图片描述

(4)最后分别将COIL-100-1和COIL-100-2可视化;以及COIL-100-agument-1 和 COIL-100-agument-2可视化。
matla可视化代码如下:

%%% tsne visulization
clc;
clear;
addpath('tSNE_matlab');

savefile1 = 'C:\Users\lenovo\Documents\MATLAB\COIL-Augment-tsne\data\COIL-100-agumnet-1.mat';
savefile2 = 'C:\Users\lenovo\Documents\MATLAB\COIL-Augment-tsne\data\COIL-100-agumnet-2.mat';

load(savefile1);
load(savefile2);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Xs=X_src;
Xt=X_tar;
X=[Xs;Xt];

color1=[1,0,0];%red
color2=[0,0,1];%blue
Y1=[repmat(color1,[length(Y_src),1]);repmat(color2,[length(Y_tar),1])];

mappedX = tsne(X, Y1, 2,100,30);

savefile = ['C:\Users\lenovo\Documents\MATLAB\COIL-Augment-tsne\save_tu\map_COIL_100_10x10','.mat'];
save(savefile, 'mappedX','X_src','X_tar','Y_src','Y_tar');


完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值