I extract values and dump into 2 separate csv files.
public static ArrayList<ArrayList<Object>> getImageData() { BufferedImage img; ArrayList<ArrayList<Object>> result = new ArrayList<>(); try { img = ImageIO.read(new File(IMG)); int widthSample = 1; int heightSample = 2; for (int j = 0; j < img.getHeight(); j++) { if (j % heightSample != 0) { continue; } for (int i = 0; i < img.getWidth(); i++) { if (i % widthSample != 0) { continue; } String color = getPixelData(img, i, j); ArrayList<Object> res = new ArrayList<>(); res.add(i); res.add(j); res.add(color); result.add(res); } } } catch (IOException e) { e.printStackTrace(); } return result; } private static String getPixelData(BufferedImage img, int x, int y) { int argb = img.getRGB(x, y); int rgb[] = new int[] { (argb >> 16) & 0xff, // red (argb >> 8) & 0xff, // green (argb) & 0xff // blue }; String color = colorUtils.getColorNameFromRgb(rgb[0], rgb[1], rgb[2]); return color; }
With this logic, you can generate some shapes in a plane and make some part of image as green. Green part will be your test data.(Place you want svm to predict) For example you can paint 1/4 of a circle or rectangle to green to see the result. In next post i will try stars and top of bottle.
maindata <- read.csv(file="E:/REDA/japan_flag_data1.csv", header=FALSE, sep=",") test <- read.csv(file="E:/REDA/japan_flag_data1_test.csv", header=FALSE, sep=",") traindata = data.frame( x=maindata$V1, y=maindata$V2 ,colpart = as.factor( maindata$V3 ) ) testdf = data.frame( x=test$V1, y=test$V2 ,colpart = as.factor( test$V3 ) ) plot(traindata$x, traindata$y , col = traindata$colpart ) fitsvm = svm(colpart ~ ., data=traindata) plot(fitsvm, traindata, y~x , col=c("red","white")) predictdata = predict(fitsvm, newdata = testdf) points(x=testdf$x, y = testdf$y , pch = 19,col = c("blue", "green")[as.numeric(predictdata)] ,cex=2.6)
The blue and green points are predictions from missing part. Blue ones which are nearer to center of circle are predicted correct. Green one are not predicted correct.We can tune parameters to estimate missing values.