diff --git a/src/imagefilters/ImageFilters.scala b/src/imagefilters/ImageFilters.scala index aa4ac71..b3e0552 100644 --- a/src/imagefilters/ImageFilters.scala +++ b/src/imagefilters/ImageFilters.scala @@ -59,4 +59,13 @@ object ImageFilters { Math.sqrt(dx*dx + dy*dy).toInt } }) + + def sobel(a: Array[Array[Int]], intensityFactor: Double): Array[Array[Int]] = filter(a, (value, x, y, width, height) => { + if (x == 0 || x == width - 1 || y == 0 || y == height - 1) value + else { + val dx: Int = a(y-1)(x+1) + 2*a(y)(x+1) + a(y+1)(x+1) - a(y-1)(x-1) - 2*a(y)(x-1) - a(y+1)(x-1) + val dy: Int = a(y+1)(x-1) + 2*a(y+1)(x) + a(y+1)(x+1) - a(y-1)(x-1) - 2*a(y-1)(x) - a(y-1)(x+1) + (Math.sqrt(dx*dx + dy*dy)*intensityFactor).toInt + } + }) } diff --git a/src/imagefilters/ImageProcessingApp.scala b/src/imagefilters/ImageProcessingApp.scala index 7568f3c..5e3eb0e 100644 --- a/src/imagefilters/ImageProcessingApp.scala +++ b/src/imagefilters/ImageProcessingApp.scala @@ -4,7 +4,7 @@ import isc.graphics.ImageGraphics object ImageProcessingApp extends App { - val imageFile = "./res/collins_eileen.png" + /*val imageFile = "./res/collins_eileen.png" val org = new ImageGraphics(imageFile, "Original", -500, -250) val dest = new ImageGraphics(imageFile, "Duplicate", 0, -250) val thresh = new ImageGraphics(imageFile, "Threshold", -500, 250) @@ -22,5 +22,19 @@ object ImageProcessingApp extends App { mean2.setPixelsBW(ImageFilters.mean(mean2.getPixelsBW(), 4)) val edges = new ImageGraphics("./res/rice.jpg", "Edges", 500, 250) - edges.setPixelsBW(ImageFilters.edges(edges.getPixelsBW())) + edges.setPixelsBW(ImageFilters.edges(edges.getPixelsBW()))*/ + + val imageFile: String = "./res/grace_hopper.jpg" + val org = new ImageGraphics(imageFile, "Original", -768, -512) + val bw = new ImageGraphics(imageFile, "Black & White", -256, -512) + val threshold = new ImageGraphics(imageFile, "Threshold", 256, -512) + val blur = new ImageGraphics(imageFile, "Blurred", -768, 0) + val edges = new ImageGraphics(imageFile, "Edge detection", -256, 0) + val sobel = new ImageGraphics(imageFile, "Sobel", 256, 0) + + bw.setPixelsBW(ImageFilters.duplicate(org.getPixelsBW())) + threshold.setPixelsBW(ImageFilters.threshold(org.getPixelsBW(), 128)) + blur.setPixelsBW(ImageFilters.mean(org.getPixelsBW(), 3)) + edges.setPixelsBW(ImageFilters.edges(org.getPixelsBW())) + sobel.setPixelsBW(ImageFilters.sobel(org.getPixelsBW(), 0.3)) }