import numpy as np
import sklearn
from sklearn.manifold import TSNE
import cv2
# Random state.
RS = 20150101
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patheffects as PathEffects
import matplotlib
from numpy import *
# We import seaborn to make nice plots.
import seaborn as sns
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
sns.set_style('darkgrid')
sns.set_palette('muted')
sns.set_context("notebook", font_scale=1.5,
rc={"lines.linewidth": 2.5})
P_dataset = []
P_lable = []
N_dataset = []
N_lable = []
# this function is for read image,the input is directory name
def read_N_directory(directory_name):
# this loop is for read each image in this foder,directory_name is the foder name with images.
for filename in os.listdir(r"./"+directory_name):
#print(filename) #just for test
#img is used to store the image data
image = cv2.imread(directory_name + "/" + filename)
# print("image=",image)
image = cv2.resize(image,(100,100),interpolation=cv2.INTER_CUBIC)
img = image.flatten()
# print(img.shape)
N_dataset.append(img)
N_img_dataset = np.matrix(N_dataset)
lable0 = 0
N_lable.append(lable0)
N_number = np.matrix(N_lable)
#print("N_img=",N_img_dataset)
# print("N_lable=",N_lable)
print("N",N_number.shape)
# print("N=",N_img_dataset)
return N_img_dataset,N_lable
def read_P_directory(directory_name):
# this loop is for read each image in this foder,directory_name is the foder name with images.
for filename in os.listdir(r"./"+directory_name ):
#print(filename) #just for test
#img is used to store the image data
image = cv2.imread(directory_name + "/" + filename)
# ResizeImage(image,img,46,46,type)
#image = image.resize((46, 46),Image.ANTIALIAS)
image = cv2.resize(image,(100,100),interpolation=cv2.INTER_CUBIC)
# print(image.shape)
# np.savetxt("./datasets1.tsv",image,delimiter=',')
img = image.flatten()
# print(img.shape)
P_dataset.append(img)
# print("dataset",dataset)
P_img_dataset = np.matrix(P_dataset)
lable1 = 1
P_lable.append(lable1)
P_number = np.matrix(P_lable)
# print("P_lable=",P_lable)
print("P",P_number.shape)
#print("P=",P_img_dataset)
return P_img_dataset,P_lable
def scatter(x, colors):
# We choose a color palette with seaborn.
palette = np.array(sns.color_palette("hls", 10))
# We create a scatter plot.
f = plt.figure(figsize=(8, 8))
ax = plt.subplot(aspect='equal')
sc = ax.scatter(x[:,0], x[:,1], lw=0, s=40,
c=palette[colors.astype(np.int)])
plt.xlim(-25, 25)
plt.ylim(-25, 25)
ax.axis('off')
ax.axis('tight')
# We add the labels for each digit.
txts = []
for i in range(10):
# Position of each label.
xtext, ytext = np.median(x[colors == i, :], axis=0)
txt = ax.text(xtext, ytext, str(i), fontsize=24)
txt.set_path_effects([
PathEffects.Stroke(linewidth=5, foreground="w"),
PathEffects.Normal()])
txts.append(txt)
return f, ax, sc, txts
if __name__=="__main__":
N_img_dataset,N_lable = read_N_directory("temp_cells_1030_org/side200/1")
P_img_dataset,P_lable = read_P_directory("temp_cells_1030_org/side200/7")
dataset = np.vstack((N_img_dataset,P_img_dataset))
lable = np.hstack((N_lable,P_lable))
print("datasets=",dataset)
# print("lable=",lable)
# np.savetxt("./datasets.tsv",dataset,delimiter=',')
# return dataset,lable
# dataset,lable = main()
digits_proj = TSNE(random_state=RS).fit_transform(dataset)
#print("digits_proj",digits_proj)
scatter(digits_proj, lable)
plt.savefig('side200.png', dpi=120)
plt.show()