package rgb;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.scene.canvas.Canvas;
import javafx.scene.Group;
public class pro extends Application {
GraphicsContext gc;
int w=500;
int h=500;
int[][] memor=new int[h][w];
int[][] memog=new int[h][w];
int[][] memob=new int[h][w];
int[][] rgb=new int[h][w];
int[][] df=new int[h][w];
double[][] dth=new double[h][w];
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
catchimg sub=new catchimg();
sub.w=500;
sub.h=500;
sub.makedata("1.jpg");
memor=sub.memor;
memog=sub.memog;
memob=sub.memob;
Canvas can = new Canvas(500,500);
gc = can.getGraphicsContext2D();
can.setLayoutX(50);
can.setLayoutY(50);
gc.setFill(Color.WHITE);
gc.fillRect(0,0,500,600);
int mx,nx;
for(mx=0;mx<h;mx++){
for(nx=0;nx<w;nx++){
rgb[mx][nx]=rgb(mx,nx);
}
}
double r1,x1,y1;
for(mx=1;mx<h;mx++){
for(nx=1;nx<w;nx++){
r1=(rgb[mx][nx]-rgb[mx][nx-1])*(rgb[mx][nx]-rgb[mx][nx-1]);
r1=r1+(rgb[mx][nx]-rgb[mx-1][nx])*(rgb[mx][nx]-rgb[mx-1][nx]);
df[mx][nx]=(int)Math.sqrt(r1);
}
}
for(mx=1;mx<h;mx++){
for(nx=1;nx<w;nx++){
x1=rgb[mx][nx]-rgb[mx-1][nx];
y1=rgb[mx][nx]-rgb[mx][nx-1];
dth[mx][nx]=kakudo(x1,y1);
}
}
int z;
for(mx=0;mx<h;mx++){
for(nx=0;nx<w;nx++){
gc.setFill(Color.BLACK);
z=0;
if(df[mx][nx]>3)z=z+1;
if(dth[mx][nx]>180)z=z+1;
if(z==2)gc.fillRect(nx,mx,1,1);
gc.setFill(Color.RED);
z=0;
if(df[mx][nx]>3)z=z+1;
if(dth[mx][nx]<180)z=z+1;
if(z==2)gc.fillRect(nx,mx,1,1);
}
}
Group root = new Group();
Scene scene = new Scene(root, 700, 700);
root.getChildren().add(can);
primaryStage.setTitle("画像処理");
primaryStage.setScene(scene);
primaryStage.show();
}
public int kakudo(double x,double y){
double s;
int deg;
s=Math.acos(x/Math.sqrt(x*x+y*y)); /*角度θを求める*/
double pie=Math.PI;
s=(s/pie)*180.0;
if (y<0) s=360-s;
deg=(int)Math.floor(s);
if ((s-deg)>=0.5)deg++;
return deg;
}
int rgb(int mx,int nx){
int r1,g1,b1,rg;
r1=memor[mx][nx];
g1=memog[mx][nx];
b1=memob[mx][nx];
rg=(int)(0.6*r1+0.3*g1+0.1*b1);
return rg;
}
}
最終更新:2014年04月20日 00:16