Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.73 KB | None | 0 0
  1. public class MyColorProgram {
  2. public static void main(String[] args) throws Exception {
  3. int[][][] original = ColorImage.read("mushroom.jpeg");
  4.  
  5. //int[][][] manipulated = upDown(original);
  6. //int[][][] manipulated = leftRight(original);
  7. //int[][][] manipulated = invert(original);
  8. //int[][][] manipulated = toGray(original);
  9. //int[][][] manipulated = toBlackWhite(original);
  10. //int[][][] manipulated = sharpenOne(original);
  11. //int[][][] manipulated = sharpenTwo(original);
  12. //int[][][] manipulated = sobel(original);
  13. int[][][] manipulated = invertSobel(original);
  14. ColorImage.write("sobelInvertColor.jpeg", manipulated);
  15. ColorImageWindow iw = new ColorImageWindow(original, manipulated);
  16. }//main
  17.  
  18. public static int[][][] upDown(int[][][] samples) {
  19. int[][][] newSamples = new int[samples.length][samples[0].length][3];
  20. for (int row = 0; row < samples.length; row = row + 1)
  21. for (int col = 0; col < samples[row].length; col = col + 1)
  22. for (int c = 0; c < samples[row][col].length; c = c + 1)
  23. newSamples[row][col][c] = samples[samples.length - row - 1][col][c];
  24. return newSamples;
  25. }//upDown
  26. //Before:En färgbild som ges av ett 3dimentionelt fält
  27. //After:Flippar bilden runt y-axeln
  28. public static int[][][] leftRight(int[][][] samples) {
  29. int[][][] flippedColor = new int[samples.length][samples[0].length][3];
  30. for (int row = 0; row < samples.length; row = row + 1)
  31. for (int col = 0; col < samples[row].length; col = col + 1)
  32. for (int c = 0; c < samples[row][col].length; c = c + 1)
  33. flippedColor[row][col][c] = samples[row][samples[0].length - col - 1][c];
  34. return flippedColor;
  35. }//leftRight
  36.  
  37. //Before:En färgbild som ges av ett 3dimentionelt fält
  38. //After:Tar 255 -orginal pixeln i varje fält av den tredje dimensionen vilket resulterar i en inverterad färgbild
  39. public static int[][][] invert(int[][][] samples) {
  40. int[][][] invertedColor = new int[samples.length][samples[0].length][3];
  41. for (int row = 0; row < samples.length; row = row + 1)
  42. for (int col = 0; col < samples[row].length; col = col + 1)
  43. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  44. invertedColor[row][col][c] = 255 - samples[row][col][c];
  45. }
  46. return invertedColor;
  47. } // invert
  48. //Before:En färgbild som ges av ett 3dimentionelt fält
  49. //After:Sätter en luminans som beräknas ut efter orginalpixels färg i RGB vilket ger
  50. //en bra lljuskvalité från en färgbild till en gråskalig bild
  51. public static int[][][] toGray(int[][][] samples) {
  52. int[][][] colorToGrey = new int[samples.length][samples[0].length][3];
  53. int r;
  54. int g;
  55. int b;
  56. for (int row = 0; row < samples.length; row = row + 1)
  57. for (int col = 0; col < samples[row].length; col = col + 1)
  58. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  59. r = samples[row][col][0];
  60. g = samples[row][col][1];
  61. b = samples[row][col][2];
  62. int l = (int) (0.299 * r + 0.587 * g + 0.114 * b);
  63. colorToGrey[row][col][c] = l;
  64. }
  65. return colorToGrey;
  66. }
  67. //Before:En färgbild som ges av ett 3dimentionelt fält
  68. //After:med hjälp utav att sätta det 3e dfältet i vår bild som utgörs utav RGB
  69. //sätts en luminans och sen blir den nya pixeln vit om den är >=128 och s vart om den är <128
  70. public static int[][][] toBlackWhite(int[][][] samples) {
  71. int[][][] blackWhiteSample = new int[samples.length][samples[0].length][3];
  72. int r;
  73. int g;
  74. int b;
  75. for (int row = 0; row < samples.length; row = row + 1)
  76. for (int col = 0; col < samples[row].length; col = col + 1)
  77. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  78. r = samples[row][col][0];
  79. g = samples[row][col][1];
  80. b = samples[row][col][2];
  81. double l = (0.299 * r + 0.587 * g + 0.114 * b);
  82. if (l >= 128)
  83. blackWhiteSample[row][col][c] = 255;
  84. else
  85. blackWhiteSample[row][col][c] = 0;
  86. }
  87. return blackWhiteSample;
  88. }//toBlackWhite
  89. //Before:En färgbild som ges av ett 3dimentionelt fält
  90. //After: Med användning utav faltningsfilter på formen
  91. // ||-1 -1 -1||
  92. // ||-1 9 -1||
  93. // ||-1 -1 -1||
  94. //Uppnås en skarpare bild ifrån orginalbilden
  95. public static int[][][] sharpenOne(int[][][] samples) {
  96. int[][][] sharperSample = new int[samples.length][samples[0].length][3];
  97. int sum;
  98. for (int row = 0; row < samples.length; row = row + 1) {
  99. for (int col = 0; col < samples[row].length; col = col + 1) {
  100. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  101. sum = 0;
  102. if(!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
  103. for (int r = -1; r < 2; r++) {
  104. for (int co = -1; co < 2; co++) {
  105. if (co == 0 && r == 0) {
  106. sum = sum + samples[row - r][col - co][c] * 9;
  107. } else {
  108. sum = sum + samples[row - r][col - co][c] * -1;
  109. }
  110. }
  111. }
  112. if (sum < 0)
  113. sum = 0;
  114. if (sum > 255)
  115. sum = 255;
  116. sharperSample[row][col][c] = sum;
  117. }
  118. }
  119. }
  120. return sharperSample;
  121. }
  122. //Before:En färgbild som ges av ett 3dimentionelt fält
  123. //After: Med användning utav faltningsfilter på formen
  124. // ||0 -1 0||
  125. // ||-1 5 -1||
  126. // ||0 -1 0||
  127. //Uppnås en skarpare bild ifrån orginalbilden
  128. public static int[][][] sharpenTwo(int[][][] samples) {
  129. int[][][] sharperSample = new int[samples.length][samples[0].length][3];
  130. int sum;
  131. for (int row = 0; row < samples.length; row = row + 1) {
  132. for (int col = 0; col < samples[row].length; col = col + 1) {
  133. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  134. sum = 0;
  135. if(!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
  136. for (int r = -1; r < 2; r++) {
  137. for (int co = -1; co < 2; co++) {
  138. if (co == 0 && r == 0) {
  139. sum = sum + samples[row - r][col - co][c] * 5;
  140. } else {
  141. if((r == -1 && co == 0) || (r == 1 && co == 0) || (r == 0 && co == -1) || (r == 0 && co == 1)) {
  142. sum = sum + samples[row - r][col - co][c] * -1;
  143. }
  144. }
  145. }
  146. }
  147. if (sum < 0)
  148. sum = 0;
  149. if (sum > 255)
  150. sum = 255;
  151. sharperSample[row][col][c] = sum;
  152. }
  153. }
  154. }
  155. return sharperSample;
  156. }
  157. //Before:En färgbild som ges av ett 3dimentionelt fält
  158. //After: Med användning utav faltningsfilter på formen
  159. // ||-1 -2 -1||
  160. // ||0 0 0||
  161. // ||1 2 1|| i x-led =dx
  162. //och i y-led=dy används
  163. // ||-1 0 1||
  164. // ||-2 0 2||
  165. // ||-1 0 1||
  166. //efter att faltningsfiltren applicerats ges den nya pixeln värdet efter Math.sqrt((dx * dx) + (dy * dy))
  167. public static int[][][] sobel(int[][][] samples){
  168. double dx;
  169. double dy;
  170. int sum;
  171. int[][][] sobelSample = new int[samples.length][samples[0].length][3];
  172. for (int row = 0; row < samples.length; row = row + 1) {
  173. for (int col = 0; col < samples[row].length; col = col + 1) {
  174. for (int c = 0; c < samples[row][col].length; c = c + 1) {
  175. dx = 0;
  176. dy = 0;
  177. if (!(col == 0 || col == samples[0].length - 1 || row == 0 || row == samples.length - 1))
  178. for (int r = -1; r < 2; r++) {
  179. for (int co = -1; co < 2; co++) {
  180. if ((co == 0 && r == 0) || (r == 0 && co == -1) || (r == 0 && co == 1)) {
  181. dx = dx;
  182. } else if ((r == -1 && co == -1) || (r == -1 && co == 1)) {
  183. dx = dx + samples[row + r][col + co][c] * -1;
  184. } else if (r == -1 && co == 0) {
  185. dx = dx + samples[row + r][col + co][c] * -2;
  186. } else if (r == 1 && co == 0) {
  187. dx = dx + samples[row - r][col + co][c] * 2;
  188. } else if ((r == 1 && co == -1) || (r == 1 && co == 1)) {
  189. dx = dx + samples[row + r][col + co][c];
  190. }
  191.  
  192. if ((co == 0 && r == -1) || (r == 0 && co == 0) || (r == 1 && co == 0)) {
  193. dy = dy;
  194. } else if ((r == -1 && co == -1) || (r == 1 && co == -1)) {
  195. dy = dy + samples[row + r][col + co][c] * -1;
  196. } else if (r == 0 && co == -1) {
  197. dy = dy + samples[row + r][col + co][c] * -2;
  198. } else if (r == 0 && co == 1) {
  199. dy = dy + samples[row + r][col + co][c] * 2;
  200. } else if ((r == -1 && co == 1) || (r == 1 && co == 1)) {
  201. dy = dy + samples[row + r][col + co][c];
  202. }
  203. }
  204. }
  205. sum = (int) Math.sqrt((dx * dx) + (dy * dy));
  206. if (sum < 0)
  207. sum = 0;
  208. if (sum > 255)
  209. sum = 255;
  210. sobelSample[row][col][c] = sum;
  211. }
  212. }
  213. }
  214. return sobelSample;
  215. }
  216. //Before:En färgbild
  217. //After: Applicering utav metoden invert som argument i metoden sobel ges en inverterad bild där kanter hittats via ett sobelfilter.
  218. public static int[][][] invertSobel(int[][][] samples){
  219. return invert(sobel(samples));
  220. }
  221. }//MyColorProgram
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement