Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MyColorProgram {
- public static void main(String[] args) throws Exception {
- int[][][] original = ColorImage.read("mushroom.jpeg");
- //int[][][] manipulated = upDown(original);
- //int[][][] manipulated = leftRight(original);
- //int[][][] manipulated = invert(original);
- //int[][][] manipulated = toGray(original);
- //int[][][] manipulated = toBlackWhite(original);
- //int[][][] manipulated = sharpenOne(original);
- //int[][][] manipulated = sharpenTwo(original);
- //int[][][] manipulated = sobel(original);
- int[][][] manipulated = invertSobel(original);
- ColorImage.write("sobelInvertColor.jpeg", manipulated);
- ColorImageWindow iw = new ColorImageWindow(original, manipulated);
- }//main
- public static int[][][] upDown(int[][][] samples) {
- int[][][] newSamples = new int[samples.length][samples[0].length][3];
- for (int row = 0; row < samples.length; row = row + 1)
- for (int col = 0; col < samples[row].length; col = col + 1)
- for (int c = 0; c < samples[row][col].length; c = c + 1)
- newSamples[row][col][c] = samples[samples.length - row - 1][col][c];
- return newSamples;
- }//upDown
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After:Flippar bilden runt y-axeln
- public static int[][][] leftRight(int[][][] samples) {
- int[][][] flippedColor = new int[samples.length][samples[0].length][3];
- for (int row = 0; row < samples.length; row = row + 1)
- for (int col = 0; col < samples[row].length; col = col + 1)
- for (int c = 0; c < samples[row][col].length; c = c + 1)
- flippedColor[row][col][c] = samples[row][samples[0].length - col - 1][c];
- return flippedColor;
- }//leftRight
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After:Tar 255 -orginal pixeln i varje fält av den tredje dimensionen vilket resulterar i en inverterad färgbild
- public static int[][][] invert(int[][][] samples) {
- int[][][] invertedColor = new int[samples.length][samples[0].length][3];
- for (int row = 0; row < samples.length; row = row + 1)
- for (int col = 0; col < samples[row].length; col = col + 1)
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- invertedColor[row][col][c] = 255 - samples[row][col][c];
- }
- return invertedColor;
- } // invert
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After:Sätter en luminans som beräknas ut efter orginalpixels färg i RGB vilket ger
- //en bra lljuskvalité från en färgbild till en gråskalig bild
- public static int[][][] toGray(int[][][] samples) {
- int[][][] colorToGrey = new int[samples.length][samples[0].length][3];
- int r;
- int g;
- int b;
- for (int row = 0; row < samples.length; row = row + 1)
- for (int col = 0; col < samples[row].length; col = col + 1)
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- r = samples[row][col][0];
- g = samples[row][col][1];
- b = samples[row][col][2];
- int l = (int) (0.299 * r + 0.587 * g + 0.114 * b);
- colorToGrey[row][col][c] = l;
- }
- return colorToGrey;
- }
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After:med hjälp utav att sätta det 3e dfältet i vår bild som utgörs utav RGB
- //sätts en luminans och sen blir den nya pixeln vit om den är >=128 och s vart om den är <128
- public static int[][][] toBlackWhite(int[][][] samples) {
- int[][][] blackWhiteSample = new int[samples.length][samples[0].length][3];
- int r;
- int g;
- int b;
- for (int row = 0; row < samples.length; row = row + 1)
- for (int col = 0; col < samples[row].length; col = col + 1)
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- r = samples[row][col][0];
- g = samples[row][col][1];
- b = samples[row][col][2];
- double l = (0.299 * r + 0.587 * g + 0.114 * b);
- if (l >= 128)
- blackWhiteSample[row][col][c] = 255;
- else
- blackWhiteSample[row][col][c] = 0;
- }
- return blackWhiteSample;
- }//toBlackWhite
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After: Med användning utav faltningsfilter på formen
- // ||-1 -1 -1||
- // ||-1 9 -1||
- // ||-1 -1 -1||
- //Uppnås en skarpare bild ifrån orginalbilden
- public static int[][][] sharpenOne(int[][][] samples) {
- int[][][] sharperSample = new int[samples.length][samples[0].length][3];
- int sum;
- for (int row = 0; row < samples.length; row = row + 1) {
- for (int col = 0; col < samples[row].length; col = col + 1) {
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- sum = 0;
- if(!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
- for (int r = -1; r < 2; r++) {
- for (int co = -1; co < 2; co++) {
- if (co == 0 && r == 0) {
- sum = sum + samples[row - r][col - co][c] * 9;
- } else {
- sum = sum + samples[row - r][col - co][c] * -1;
- }
- }
- }
- if (sum < 0)
- sum = 0;
- if (sum > 255)
- sum = 255;
- sharperSample[row][col][c] = sum;
- }
- }
- }
- return sharperSample;
- }
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After: Med användning utav faltningsfilter på formen
- // ||0 -1 0||
- // ||-1 5 -1||
- // ||0 -1 0||
- //Uppnås en skarpare bild ifrån orginalbilden
- public static int[][][] sharpenTwo(int[][][] samples) {
- int[][][] sharperSample = new int[samples.length][samples[0].length][3];
- int sum;
- for (int row = 0; row < samples.length; row = row + 1) {
- for (int col = 0; col < samples[row].length; col = col + 1) {
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- sum = 0;
- if(!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
- for (int r = -1; r < 2; r++) {
- for (int co = -1; co < 2; co++) {
- if (co == 0 && r == 0) {
- sum = sum + samples[row - r][col - co][c] * 5;
- } else {
- if((r == -1 && co == 0) || (r == 1 && co == 0) || (r == 0 && co == -1) || (r == 0 && co == 1)) {
- sum = sum + samples[row - r][col - co][c] * -1;
- }
- }
- }
- }
- if (sum < 0)
- sum = 0;
- if (sum > 255)
- sum = 255;
- sharperSample[row][col][c] = sum;
- }
- }
- }
- return sharperSample;
- }
- //Before:En färgbild som ges av ett 3dimentionelt fält
- //After: Med användning utav faltningsfilter på formen
- // ||-1 -2 -1||
- // ||0 0 0||
- // ||1 2 1|| i x-led =dx
- //och i y-led=dy används
- // ||-1 0 1||
- // ||-2 0 2||
- // ||-1 0 1||
- //efter att faltningsfiltren applicerats ges den nya pixeln värdet efter Math.sqrt((dx * dx) + (dy * dy))
- public static int[][][] sobel(int[][][] samples){
- double dx;
- double dy;
- int sum;
- int[][][] sobelSample = new int[samples.length][samples[0].length][3];
- for (int row = 0; row < samples.length; row = row + 1) {
- for (int col = 0; col < samples[row].length; col = col + 1) {
- for (int c = 0; c < samples[row][col].length; c = c + 1) {
- dx = 0;
- dy = 0;
- if (!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
- for (int r = -1; r < 2; r++) {
- for (int co = -1; co < 2; co++) {
- if ((co == 0 && r == 0) || (r == 0 && co == -1) || (r == 0 && co == 1)) {
- dx = dx;
- } else if ((r == -1 && co == -1) || (r == -1 && co == 1)) {
- dx = dx + samples[row + r][col + co][c] * -1;
- } else if (r == -1 && co == 0) {
- dx = dx + samples[row + r][col + co][c] * -2;
- } else if (r == 1 && co == 0) {
- dx = dx + samples[row - r][col + co][c] * 2;
- } else if ((r == 1 && co == -1) || (r == 1 && co == 1)) {
- dx = dx + samples[row + r][col + co][c];
- }
- if ((co == 0 && r == -1) || (r == 0 && co == 0) || (r == 1 && co == 0)) {
- dy = dy;
- } else if ((r == -1 && co == -1) || (r == 1 && co == -1)) {
- dy = dy + samples[row + r][col + co][c] * -1;
- } else if (r == 0 && co == -1) {
- dy = dy + samples[row + r][col + co][c] * -2;
- } else if (r == 0 && co == 1) {
- dy = dy + samples[row + r][col + co][c] * 2;
- } else if ((r == -1 && co == 1) || (r == 1 && co == 1)) {
- dy = dy + samples[row + r][col + co][c];
- }
- }
- }
- sum = (int) Math.sqrt((dx * dx) + (dy * dy));
- if (sum < 0)
- sum = 0;
- if (sum > 255)
- sum = 255;
- sobelSample[row][col][c] = sum;
- }
- }
- }
- return sobelSample;
- }
- //Before:En färgbild
- //After: Applicering utav metoden invert som argument i metoden sobel ges en inverterad bild där kanter hittats via ett sobelfilter.
- public static int[][][] invertSobel(int[][][] samples){
- return invert(sobel(samples));
- }
- }//MyColorProgram
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement