40
Mini-Project 1: Seam Carving Lecture 1 Barbara Jobstmann 15.10.2015

Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Mini-Project 1: Seam Carving

Lecture 1

Barbara Jobstmann

15.10.2015

Page 2: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Outline

• Administrative • Information/Starting point• Submission and Groups• Submission Server and Tokens

• Project• Goal• Idea• Provided Code• Project Details:

• Representation of Images• Part 1: Colors• Part 2: Filters (Convolution)• Part 3: Graphs and Shortest Path (in next lecture)

Page 3: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Information about the Project

• Detailed project description and provided material: under “Mini-project 1” → “Description” athttp://proginsc.epfl.ch/wwwhiver/moodle-entry.html

Page 4: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission

• Deadline: Nov 2nd, 1pm

• Groups of (at most) 2 students

• Submission: under “Mini-project 1” → “Rendu” athttp://proginsc.epfl.ch/wwwhiver/moodle-entry.html

Page 5: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission Content

• Eclipse Archive file (zip-file < 20kB) that includes • Color.java

• Filter.java

• Seam.java

Page 6: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission Content

• Eclipse Archive file (zip-file < 20kB) that includes • Color.java

• Filter.java

• Seam.java

Page 7: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission Server• Will open one week before the deadline:

• From Mon, Oct 29th 9am until Fri, Oct 30th 4pm. • No submissions over the weekend!• Reopen on Mon, Nov 2nd from 9am to 1pm (strict deadline).

• Each student will need a token (specific key) to submit.• Tokens will be send out per email one week before the

submission deadline.• Each submission required two token: one from each

group member. If you work alone, you need to use your token twice.

• You can submit a new version using the same token.• Hint: submit initial (incomplete) version way before the

deadline to get familiar with the submission process

Page 8: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission Server – Examples

• Example tokens: p1-11111 and p1-12345

• Example of submission with 2 students

• Example of submission with 1 student

Page 9: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Submission – Cheating

• The project is graded.

• The exchange of ideas between groups or with third parties is permitted and even recommended.

• The exchange of code is strictly forbidden!

• Plagiarism will be controlled and will be considered cheating.

• In case of cheating, you will receive a rating of "NA“:Art. 18 “Fraude de l'ordonnance sur la discipline“https://www.admin.ch/opc/fr/classified-compilation/20041650/index.html

• Note that at anytime, you will need to be able to explain your code.

Page 10: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Outline

• Administrative • Information/Starting point• Submission and Groups• Submission Server and Tokens

• Project• Goal• Idea• Provided Code• Project Details:

• Representation of Images• Part 1: Colors• Part 2: Filters (Convolution)• Part 3: Graphs and Shortest Path (in next lecture)

Page 11: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Goal

• Display images without distortion on various media (cell phones, tablets,…)

• Resize image based on content

Page 12: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Image Resizing

scale

crop

Page 13: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Seam Carving: Content-Aware Image Resizing

Page 14: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Idea

Repeat until image has desired size:

1. Convert to grey-scale image

2. Detect edges

3. Compute and cut a “seam”

Page 15: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Example with 300 Seams

Page 16: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Underlying Techniques

Repeat until image has desired size:

1. Convert to grey-scale image• Deal with colors

2. Detect edges• Apply filters (convolution)

3. Compute and cut a “seam”• Create graph, search shortest path

Page 17: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Parts of the Project

Repeat until image has desired size:

1. Convert to grey-scale image• Deal with colors

2. Detect edges• Apply filters (convolution)

3. Compute and cut a “seam”• Create graph, search shortest path

Color.java

Filter.java

Seam.java

Page 18: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Provided Code (1)

class Helper

• Read and write images to two-dimensional integer arraypublic static int[][] read(String path)public static boolean write(String path, int[][] array)

• Display imagepublic static void show(int[][] array, String title)

Image will pop-up and program will be paused until image is closed.

• Example:int[][] image = Helper.read("doves.jpg");Helper.show(image, "Original");

Page 19: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Provided Code (2)

class Seam

• Remove a given seam from a given imagepublic static int[][] shrink(int[][] image, int[] seam)

• Merge a given seam with a given image (for debugging)public static int[][] merge(int[][] image, int[] seam)

class Main

• Example of how to use methods to shrink an image

Page 20: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Provided Code (3)

class Tests

• Some Junit tests to simplify debugging

• These tests are not exhaustive, i.e., if you pass all of the tests, it does not mean that you will get full marks!

• It is your responsibility to test your implementation!

Page 21: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Outline

• Administrative • Information/Starting point• Submission and Groups• Submission Server and Tokens

• Project• Goal• Overview• Provided Code• Project Details:

• Representation of Images• Part 1: Colors• Part 2: Filters (Convolution)• Part 3: Graphs and Shortest Path (in next lecture)

Page 22: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Representation of Images

• Digital image = raster of pixel (or picture elements)

• Resolution = number of pixels used to represent an image, e.g., 1024x768 means • 1024 pixels from left to right

• 768 pixels from top to bottom

• In this project: images are represented as two-dimensional arrays

Page 23: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Refresher: Arrays in Java

Example Functionality

image.length Length of an array (width of image)

image[4] Access the element at position 4Recall: first element is at position 0; last element is at position length-1

image[4].length Length of element at position 4 (height of image in row 4)

image[4][1] Access to element at row 4 and column 1

new int[4][5] Create a new 2-dimensional integer array with 4 rows (0-3) and 5 columns (0-4)

Page 24: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Task 1: Colors

• Each pixel has a color defined by an RGB (Red-Green-Blue) value.

• The RGB color model is an additive color model in which red, green, and blue light are added together in various ways to reproduce a broad array of colors. • Each RGB value is represented by three Bytes (3x8 bits),

one Byte for each color.

• Each base colors can have an intensity between 0 (min) and 28-1=255 (max) in decimal, or equivalently from 00 to ff in hexadecimal.

Page 25: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Examples

In hexIn hex

In hexIn hex

In dec In dec

In dec In dec

Page 26: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Refresher: Numbers in Java

• Decimal (base 10):int decValue = 13;

• Binary (base 2):int binValue1 = 0b00000000000000000000000000001101; //32-bitsint binValue2 = 0b1101; //leading zeros are not requiredStarting with Java 7 you can use underlines for readability. Underlines are optional.int binValue1 = 0b0000_0000__0000_0000__0000_0000__0000_1101;

• Hexadecimal (base 16):int hexValue1 = 0x00_00_00_0d;int hexValue2 = 0xd; //leading zeros are not required

• Color in JAVA: integer (4 bytes = 32 bits), e.g.,

Color Unused/alpha Red Green Blue

In binary 00000000 00100000 11000000 11111111

In hexad. 00 20 c0 ff

In decimal 0 32 192 255

Page 27: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Selecting Bits from Integer

int val1 = 0b00000000_10000000_00001010_00000001;

• Step 1: shift right >>int val2 = val1 >> 9;

Output in binary: 100000000000101

• Step 2: mask &int val3 = val2 & 0b111;

Output in binary: 101

• Print integer in binary or hex in Java:System.out.println(Integer.toBinaryString(val1));System.out.println(Integer.toHexString(val1));

start end

Page 28: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Merging Bits into Integer

int val1 = 0b1010;int val2 = 0b10000001;Goal: 0b1010_10000001

• Step 1: shift left <<int val1_sl = val1 << 8;

Output in binary: 101000000000

• Step 2: add or bitwise-or |int val3 = val1_sl + val2;int val3 = val1_sl | val2;

Output in binary: 101010000001

Page 29: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Task 1: Methods to Implement• Convert a pixel: for each color convert RGB-value to float

value between 0.0 (min: intensity 0) and 1.0 (max: intensity 255)

• public static float getRed(int rgb)• public static float getGreen(int rgb)• public static float getBlue(int rgb)• public static float getGray(int rgb)• public static int getRGB(float red, float green, floatblue);

• public static int getRGB(float gray)

• Convert an image• public static float[][] toGray(int[][] image)• public static int[][] toRGB(float[][] gray)

• Hint: float to int conversion, e.g., int intValue = (int) floatValue;

Page 30: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Outline

• Administrative • Information/Starting point• Submission and Groups• Submission Server and Tokens

• Project• Goal• Idea• Provided Code• Project Details:

• Representation of Images• Part 1: Colors• Part 2: Filters (Convolution)• Part 3: Graphs and Shortest Path (in next lecture)

Page 31: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Task 2: Filters

Original

Smoothed image

Edge detection (Sobel)

Page 32: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Idea

• Compute new value of pixel based on surroundingpixels, e.g., smoothing = average of neighboring pixels

• Mathematical operator: convolution

Image

Kernel

Page 33: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

• Compute new value of pixel based on surroundingpixels, e.g., smoothing = average of neighboring pixels

• Mathematical operator: convolution

Idea

Image

vv v v v v v v

v v v v v v vv

Page 34: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Compute a Pixel

Page 35: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Compute a Pixel

Page 36: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

How to Deal with Borders?

• In general, there are many ways

• In our project: copy value from closest pixel

• Examples: • Pixel at row=-1 and col=1 equal to pixel at row=0 and col=1• Pixel at row=0 and col=-1 equal to pixel at row=0 and col=0

Page 37: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

How to Deal with Borders?

• In general, there are many ways

• In our project: copy value from closest pixel

• Examples: • Pixel at row=-1 and col=1 equal to pixel at row=0 and col=1• Pixel at row=0 and col=-1 equal to pixel at row=0 and col=0

Page 38: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Interesting Kernels

Identity Smooth SobelX:to detectverticaledges

SobelY:to detecthorizontal

edges

Edges detection (in this project) = Euclidean norm of sobelX value and sobelY value,i.e.,

𝑠𝑜𝑏𝑒𝑙𝑋𝑉𝑎𝑙𝑢𝑒2 + 𝑠𝑜𝑏𝑒𝑙𝑌𝑉𝑎𝑙𝑢𝑒2

Page 39: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Methods to Implement• public static float at(float[][] gray, int row, int col)

• public static float[][] filter(float[][] gray, float[][] kernel)

• public static float[][] smooth(float[][] gray)

• public static float[][] sobelX(float[][] gray)

• public static float[][] sobelY(float[][] gray)

• public static float[][] sobel(float[][] gray)

• Hint: usage of square root in Java, e.g., float sqrtValue = (float) Math.sqrt(value);

Page 40: Mini-Project 1: Seam Carvingproginsc.epfl.ch/ · 2017-09-04 · Submission –Cheating •The project is graded. •The exchange of ideas between groups or with third parties is permitted

Summary

• Administrative • Information/Starting point• Submission and Groups• Submission Server and Tokens

• Project• Goal• Idea• Provided Code• Project Details:

• Representation of images• Part 1: Colors• Part 2: Filters (Convolution)• Part 3: Graphs and Shortest Path (in next lecture)