Finding Red Pixels – Part 1
description
Transcript of Finding Red Pixels – Part 1
![Page 1: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/1.jpg)
Finding Red Pixels – Part 1
Prof. Noah SnavelyCS1114http://www.cs.cornell.edu/courses/CS1114/
![Page 2: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/2.jpg)
2
Administrivia
Everyone should have a lab account, and cardkey access to CS319– If not, let me know
Assignment 1 will be out tomorrow, due Friday, Feb. 12– Will be graded in demo sessions
Office hours:– Prof. Snavely: Th 1:30 – 3:00 Upson 4157– TA office hours are posted on the webpage
Quiz 1 will be next Thursday
![Page 3: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/3.jpg)
3
Tracking a lightstick
We will spend the first part of CS1114 trying to track a red lightstick
On the way we will cover important CS themes– Fundamental algorithms– Good programming style– Computational problem
solving
![Page 4: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/4.jpg)
Human vision
4
Question: How many people are in this image?
Source: “80 million tiny images” by Torralba, et al.
![Page 5: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/5.jpg)
Human vision has its shortcomings…
5
Sinha and Poggio, Nature, 1996
Credit: Steve Seitz
![Page 6: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/6.jpg)
Human vision has its shortcomings…
6
by Ted Adelson, slide credit Steve Seitz
![Page 7: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/7.jpg)
What is an image?
A grid of numbers (intensity values) In Matlab, a matrix
•7
[ 10 30 40 106 123 … ; 8 49 58 112 145 … ; 16 53 86 123 152 … ; … ]
{{
220
300
300 x 220 matrix
![Page 8: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/8.jpg)
Matrices in Matlab
1D matrix is often called a vector– Similar to arrays in other languages
•8
A = [ 10 30 40 106 123 ]
Row vector(or 1 x 5 matrix)
B = [ 10 ; 30 ; 40 ; 106 ; 123 ]
Column vector
(or 5 x 1 matrix)
A(1) == 10A(4) == 106
![Page 9: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/9.jpg)
Matrices in Matlab
•9
C = [ 10 30 40 106 123 ; 8 49 58 112 145 ; 16 53 86 123 152 ]
3 x 5 matrix
C(1,1) == ?
C(2,4) == ?
10
112
can also assign to a matrix entries
C(1,1) = C(1,1) + 1
![Page 10: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/10.jpg)
Image processing
We often want to modify an image by “doing something” to each pixel:
•10
BlurBrighten
![Page 11: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/11.jpg)
Brightening an image
•11
Q: What does this mean in terms of matrix entries?
[ 10 30 40 106 123 ; 8 49 58 112 145 ; 16 53 86 123 152 ]
A: Increase each element by some amount(say, 20)
![Page 12: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/12.jpg)
Brightening an image (Take 1)
•12
D = [ 10 30 40 106 123 8 49 58 112 145 16 53 ]
D(1) = D(1) + 20;D(2) = D(2) + 20;D(3) = D(3) + 20;D(4) = D(4) + 20;D(5) = D(5) + 20;D(6) = D(6) + 20;D(7) = D(7) + 20;D(8) = D(8) + 20;D(9) = D(8) + 20;D(10) = D(10) + 20;D(11) = D(11) + 20;D(12) = D(12) + 20;D(13) = D(13) + 20;D(14) = D(14) + 20;D(15) = D(15) + 20;x
![Page 13: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/13.jpg)
•13
Avoiding duplicate code
Programming languages are designed to make this easy– It’s a huge theme in language design– Many new programming techniques are
justified by this• Object-oriented programming, higher-order
procedures, functional programming, etc.
![Page 14: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/14.jpg)
Why is it a bad idea to duplicate code?
•14
Hard to write Hard to modify Hard to get right Hard to generalize Programmer’s
“intent” is obscured
D(1) = D(1) + 20;D(2) = D(2) + 20;D(3) = D(3) + 20;D(4) = D(4) + 20;D(5) = D(5) + 20;D(6) = D(6) + 20;D(7) = D(7) + 20;D(8) = D(8) + 20;D(9) = D(8) + 20;D(10) = D(10) + 20;D(11) = D(11) + 20;D(12) = D(12) + 20;
![Page 15: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/15.jpg)
•15
Brightening an image (Take 2) Using iteration
for i = 1:12 D(i) = D(i) + 20; end
D(1) = D(1) + 20;D(2) = D(2) + 20;D(3) = D(3) + 20;D(4) = D(4) + 20;D(5) = D(5) + 20;D(6) = D(6) + 20;D(7) = D(7) + 20;D(8) = D(8) + 20;D(9) = D(9) + 20;D(10) = D(10) + 20;D(11) = D(11) + 20;D(12) = D(12) + 20;
Much easier to understand and modify the code Better expresses programmer’s “intent”
![Page 16: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/16.jpg)
Many advantages to iteration
Can do things with iteration that you can’t do by just writing lots of statements
Example: increment every vector cell– Without knowing the length of the vector!
len = length(D); % New Matlab function
for i = 1:len
D(i) = D(i) + 20;
end
•16
![Page 17: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/17.jpg)
•17
Introducing iteration into code
Programming often involves “clichés”– Patterns of code rewriting– I will loosely call these “design patterns”
Iteration is our first example
![Page 18: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/18.jpg)
Brightening 2D images
•18
C = [ 10 30 40 106 123 ; 8 49 58 112 145 ; 16 53 86 123 152 ]
3 x 5 matrix
for row = 1:3 for col = 1:5 C(row,col) = C(row,col) + 20; endend
Called a “nested” for loop
![Page 19: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/19.jpg)
Brightening 2D images
•19
for row = 1:3 for col = 1:5 C(row,col) = C(row,col) + 20 endend
What if it’s not a 3x5 matrix?
[nrows,ncols] = size(C)for row = 1:nrows for col = 1:ncols C(row,col) = C(row,col) + 20 endend
![Page 20: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/20.jpg)
•20
Using iteration to countnzeros = 0;
[nrows,ncols] = size(D);
for row = 1:nrows
for col = 1:ncols
if D(row,col) == 0
nzeros = nzeros + 1;
end;
end;
end;
D = [ 10 30 0 106 123 ; 8 49 58 0 145 ; 16 0 86 123 152 ]
![Page 21: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/21.jpg)
•21
Using iteration to countnzeros = 0;
[nrows,ncols] = size(D);
for row = 1:nrows
for col = 1:ncols
if D(row,col) == 0
nzeros = nzeros + 1;
end;
end;
end;
If D is an image, what are we counting?
![Page 22: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/22.jpg)
What about red pixels?
A grayscale image is a 2D array– Brightest = 255, darkest = 0
•22
![Page 23: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/23.jpg)
What about red pixels?
A color image is 3 different 2D arrays– For red/green/blue values (RGB)– We provide a way to create these 3 arrays
•23
=
![Page 24: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/24.jpg)
What about red pixels?
Example colors:
red(1,1) == 255, green(1,1) == blue(1,1) == 0
red(2,1) == 100 == green(2,1) == blue(2,1)
red(3,1) == 0 == green(3,1) == blue(3,1)
red(3,1) == 255 == green(3,1), blue(3,1) == 0
•24
![Page 25: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/25.jpg)
•25
How many red pixels?
img = imread(‘wand1.bmp’);
[red, green, blue] = image_rgb(img);
nreds = 0;
[nrows,ncols] = image_size(img);
for row = 1:nrows
for col = 1:ncols
if red(row,col) == 255
nreds = nreds + 1;
end;
end;
end;
![Page 26: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/26.jpg)
•26
Are we done?
We’ve counted the red pixels in Matlab– Or have we? What can go wrong?
Suppose we can pick a good constant instead of 255
You need to look at green and blue also Color perception is really hard! – PPT demo
![Page 27: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/27.jpg)
Are we done?
Assignment 1: come up with a thresholding function that returns 1 if a pixel is “reddish”, 0 otherwise
•27
binary images
![Page 28: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/28.jpg)
Why 256 intensity values?
•28
8-bit intensity (2^8 = 256)
5-bit intensity (2^5 = 32)
5-bit intensity with noise
![Page 29: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/29.jpg)
How many black pixels?
•29
nzeros = 0;
[nrows,ncols] = size(D);
for row = 1:nrows
for col = 1:ncols
if D(row,col) == 0
nzeros = nzeros + 1;
end
end
end
What if we need to execute this code many times?
![Page 30: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/30.jpg)
Turning this into a function
•30
function [ nzeros ] = count_zeros(D)
% Counts the number of zeros in a matrix
nzeros = 0;
[nrows,ncols] = size(D);
for row = 1:nrows
for col = 1:ncols
if D(row,col) == 0
nzeros = nzeros + 1;
end
end
end
Save in a file named count_zeros.m
count_zeros([1 3 4 0 2 0])
![Page 31: Finding Red Pixels – Part 1](https://reader036.fdocuments.in/reader036/viewer/2022062408/56813a45550346895da23739/html5/thumbnails/31.jpg)
For next time
Visit the lab, try out the rest of the Matlab tutorial
Watch out for assignment 1
•31