Description: How can we recognize the number of objects in a line drawing? We consider how Guzman, Huffman, and Waltz approached this problem. We then solve an example using a method based on constraint propagation, with a limited set of junction and line labels.
Instructor: Patrick H. Winston
PATRICK WINSTON: Many of you, maybe most of you, will never have to work another search problem by hand in your natural life.
Others will want to take another run at it on the final.
I've been much criticized for this way of doing grading in the class.
But the way I look at it is that the relationship between students and instructors ought to be less adversarial than it used to be in the good old days when I was a student.
I especially remember an examination we took-- all of us took-- on Rayleigh scattering.
That was 803, I think.
And back in the old days, we had to take four physics courses, not just two.
And we had to take four math courses, not just two.
Back in the days when-- well, I was going to say men were men.
But most of us were men in those days.
I think we only had 20 women in our class.
Anyway, we had a quiz on Rayleigh scattering.
And I thought, well, this is pretty hard.
And then I got my quiz back.
I thought, well, I've been found out.
I'm going to flunk out.
My father will make me go to law school.
I'll never attract anyone to marry.
Horrible things will happen.
Then the instructor announced the class average was 18.
I was two standard deviations above that.
They gave us the same exam two weeks later, and accounts vary.
Some people say that the class average went down.
Anyway, today we're going to study some stuff.
We're going to study some stuff that will make it possible for you to understand how you can do that computation in just a couple of seconds, even with the delays introduced by the redrawing.
Now this particular program-- I'm not real sure and I don't have a proof, but I think it will take more than the lifetime of the universe to find a legitimate coloring of the continental United States.
But by the end of the next class, you'll see how to do that lickety-split in just couple of seconds, even with the re-display delays.
Now we could, of course, do this in two ways.
One way is I could start off by saying, let C be a constraint satisfaction problem and just give you the result.
And anybody can do that.
And you needed to learn some stuff that way.
But there are some things that you needed to learn, I think, a different way.
And that different way involves my telling you the story of how it all came to be.
This is a new field, pretty much, and therefore I know most of the people in it.
And I know all of the people who did the work that I'm going to tell you about today.
I'm going to tell you a little bit about the struggle for coming up with the ideas that led to one of the most powerful methods you'll learn about in the subject.
It all has to do, originally, with an attempt to make a computer capable of seeing.
And everybody said to themselves, well, let's start with seeing simple things, like children's blocks.
And so Adolfo Guzman, a graduate student of Marvin Minsky's, was charged with the summer project, which led to his Ph.D. thesis, of writing a program that could look at a line drawing and determine how many objects are in the line drawing.
So for example, there behind my outline is a line drawing.
And you believe instantly that there are two objects there, even though in some deep sense, it's ambiguous.
There are all sorts of ways that you could, through trickery, arrange something with even seven objects that look that way.
But most people would say there are two objects.
So Guzman set about the problem of figuring out how to do that.
And then his work was followed by Dave Huffman.
And his work was followed up by Dave Waltz.
And his work was followed up by Jane [? Froyter ?], who's not listed there quite yet.
And I want to tell you a little bit of story how that all happened.
So Guzman took a lot of pictures.
He went to Boston Baby, the precursor to Toys R Us, purchased a large block set on a government contract, and went about the business of taking a lot of pictures of them so he'd get a feel for the domain.
And eventually he decided that he could build a program that could determine that there are two objects here by using the lines as a quanta of evidence about which faces belong together in an object.
So he said, after studying these for a long time, that these drawings tend to have a lot of arrow-type junctions and a lot of fork-type junctions.
And when you see an arrow, it's a little bit of evidence that the objects on either side of the shaft are the same-- the face on either side of the shaft belong to the same object.
And over here, the fork-type junction suggests that pairwise, three pairs of faces seem to belong to the same object.
So with that idea, he could come back to a drawing like this and start decorating it with these so-called links, these quanta of evidence that faces belong to the same object.
And if I've done it right, you get something that looks like so.
It's a little hard to see what's going on on the drawing itself.
So let me number these.
Now I have an easier-to-deal-with picture.
There are two links between 1 and 2 and 1 and 3.
One link between 2 and 3.
One between 2 and 4.
And one each from all of these.
So Guzman produces this evidence for how the problem ought to be solved and then he begins to think about various ways of using the evidence.
So he could, and did, decide that one link is enough to presume that the faces belong to the same object.
And you can see that that's a little bit too liberal.
Because that says that the whole thing is just one object.
So Guzman rejected the one-link theory and went to the two-link theory.
And the two-link theory says, oh, well, let's see.
If we insist that two links should be there before we are willing to decide that it's the same object, then these three faces are pulled together into one object.
These three are pulled together into one object.
But alas, 7 doesn't share two links with anything, so it's left dangling out there.
So plainly, the two-link theory is too conservative.
So that as you would soon discover in any [INAUDIBLE] project, would lead you to a third theory, which is two lengths repeated.
So now that we've formed these super regions, we can come back and say we'll merge super regions if they're connected together by two or more links.
So nothing new happens up here.
But this super region is joined at 7 by two or more links.
So it pulls everything together like so.
So that worked fine.
Well, it didn't work fine.
There were lots of examples of situations where it didn't work-- in situations that were considered nonsensical by us humans because it seemed silly, the kind of conclusions that it reached.
So when Guzman presented this work in his Ph.D. thesis defense, it's said-- and who knows if it's true-- but it's said that Marvin Minsky thought it was great work and we should make him a professor.
It happens that Dave Huffman was also on the committee and said that it was ad hoc and the thesis should be rejected.
So we had two polar opposites of impressions there.
Dave Huffman, by the way-- you've heard that name before, I imagine.
It's the guy who invented Huffman coating as a term paper in a information theory course taught by Bob Fano.
He got an A, they say.
So Huffman didn't like it.
He thought it was a little bit too ad hoc.
It was too heuristic.
It didn't take advantage of anything we might know about physics.
And so people began to say, well, why does it work?
And when does it not work?
And that's just about the best question you can answer in a situation like this.
And by playing with some more of Guzman's pictures and reflecting on them, it turned out that it worked because the world is full of three-face junctions.
Or let me say three-face vertexes because they're out there in the world.
We'll reserve the word junction for something else.
And three-face vertexes generally project into either an arrow or a fork.
So Guzman's whole program worked on the weak backward conclusion that if you see one of those, it probably came from one of these.
So this is in the drawing.
That's in the world.
So by a process that's neither deduction or induction, but rather abduction, you see one of those guys.
And you say, well, they often come from three-face vertexes in the world, so if you see one, it probably came from a three-face vertex in the world.
So once Huffman saw all that, being a mathematician, he began to think about how one might develop a different and better theory.
But we have to recognize that all this work started off with the efforts of Guzman, who was an experimentalist.
And Huffman was a mathematician.
So naturally, they approached the problem differently.
So Huffman says, I'm not going to concern myself too much with the actual problem that Guzman was trying to solve.
Rather, I'm going to work in a very simple world, which I can deal with mathematically.
So he decided that he was going to work in a world which had several characteristics.
Characteristic number one was that the world would be presented in general position.
That is to say, no screw cases.
So if you see a cube, it's going to look like this.
And it's not going to look like this.
So that's out.
And this is in.
And the idea here is that that's not general position, because if you perturb your point of view a little bit, you'll change those T junctions into forks and arrows.
So we know it had to deal with those kinds of weird kinds of cases.
So that's presumption number one.
Presumption number two is that we're going to be dealing with a world that's trihedral.
That means all vertexes out there are going to be formed from three planes.
So you're going to have the intersection of three planes.
So how many kinds of junctions can you see if the world is composed that way is the question that Huffman sent himself upon.
The next assumption was that there are going to be four kinds of lines.
See, Guzman only recognized two kinds of lines-- lines that have a length and lines that don't have a link.
And they don't have very much to do with the physical world.
So Huffman says, I want to get the constraint out of the physical world.
So I'm going to deal with four kinds of lines-- concave, convex, and boundary.
So each of those kinds of lines is going to have its own notation.
We'll call the convex lines plus, the concave lines minus, and a boundary lines are going to get an arrow on them, depending on which side of the object-- which side you would see the object if you walk along the direction of this little arrow.
Which is concave and which is convex?
You said something and you wrote the opposite.
PATRICK WINSTON: Yeah, sorry.
So concave, convex, and boundary.
So this down here, that's a concave line.
And that would get a minus label.
Oh, I don't know.
These lines you're seeing here, if there were stuff behind them instead of me, then all those would be convex lines.
Many times you see a boundary line.
For example, now you don't see both sides of that line down here at the bottom.
So that's a boundary line.
And the arrow would point in that direction, so as to keep the stuff of the object on the right as you walk along a kind of mathematical convention.
So three kinds of lines, four kinds of labels.
And there's some things left out.
That's because Huffman wanted to keep his problem simple, something he could manage by hand.
What's left out?
Cracks are left out.
Shadows are left out.
There's a presumption that there's nothing of interest here with respect to that.
So let's have a little vocabulary before I go on.
And I'll try to stick to it.
But there's the stuff out there, and that consists of vertexes and edges.
And over here, on the blackboard, we'll have junctions and lines.
And I'll try to stick to that vocabulary.
STUDENT: Didn't you say there were four types of lines?
PATRICK WINSTON: Yeah, there are four kinds of-- the question is, didn't I say there were four kinds of lines?
There are three kinds of lines, but since we can label a boundary line in either direction, we have four labels.
It depends on which side of the object the stuff is on.
And that will be clear, I think, as soon as I do an example.
So one, two, three assumptions.
A little bit of vocabulary.
So we have the possibility of making a complete catalog.
This is so simple.
We have the possibility of making a complete catalog of all the ways that lines can come together to form a junction with respect to these four labels.
Now at first you might say, oh my god, that will take a couple of years.
But maybe it won't take a couple of years.
And in the end, to perhaps your surprise, you discover that there are only 18 ways to arrange the labels around a junction in this world.
Everything else is excluded.
If you have something that's not in the set we're going to produce now, it can't be built with trihedral vertexes.
So I've listed up there six L's, five forks, four T's, and three arrows.
Let's see if I can figure out why there are those 18 and nothing else.
Well, if we have three vertexes coming together, that means there are eight octants, right?
And the stuff of the object may fill 1, 2, 3, 4, 5, 6, 7 or all eight octants.
Now of course, if you fill all eight octants, there's no junction.
So we don't consider that case.
If we don't fill any the octants, there's no junction.
There's no vertex.
So we don't consider that case.
But if just one of the eight octants is filled with stuff, then we can look at it from any of the seven remaining octants.
So right now, you're looking at it from one of the seven remaining octants.
And if I'm not mistaken, you're going to see a fork-style junction there, right?
And you're going to see a fork-style junction in which all of the edges are convex.
An unfortunate selection of names, because the linguists tell me that we index all of our words by the first forename.
And those have the same first forename, so they're easily confused.
So here's a fork-style junction.
And we know that one way that's legitimate for the lines to come in is with four pluses.
Now that's not the only way you can see that.
And here's another way.
There's an L-style junction, right?
And both of those are boundary lines.
And we want to draw the boundary line indicators on there so that if we walk along the arrows, the stuff of the object would be on the right.
So I suppose, to make it easier to me do my drawing, I should look at it this way.
And then I would say, well, that has to be a legitimate way of labeling a junction.
Are there any more?
Well, there's seven altogether, but many of them are the same.
There is one more that's a little different, though.
I can hold this guy up like so.
And if I'm holding at the right angle for you, you see an arrow-style junction, right?
Two boundaries, and the barb is convex.
So in this particular case, I've got that.
I've got that.
And I've got a plus there.
And that's there happen to be for the one octant filled with stuff case.
I happen to be able to reverse this, though.
And here's the seven octants filled case.
So that tells us that it's possible to have a vertex out there in a space that when reduced to a junction on the board deserves three minus labels, because all of these that you're seeing now are concave.
So another fork-style junction looks like so.
And since there's only one octant to look at from, that completes our analysis of the seven octants filled case.
Now we have a couple of other possibilities here.
We might have five octants filled with stuff.
So that means there are three octants that we can look from.
So let's suppose that these little chalk pieces are little people.
And they're looking at this junction down there, where this white object is fused with the table.
I'm fusing it with the table because I want to consider it to be one object.
We can view it from the three objects indicated by those three little chalk pieces.
And ask ourselves, well, in the event that we look at it from those three places, what do we see?
And if we look at it from the perspective of the piece of purple chalk-- I'll have to walk around and be sure-- looks like an arrow junction with two concaves and a convex.
Did I get that right?
So I'm looking at it from this perspective.
It's an arrow.
This is convex and these two are concave because I fused the paper box with the table.
Looking at it from the perspective of this blue guy-- let me rotate it so you can have a better understanding of the blue guy-- it looks like a concave line and a boundary.
So it's an L. And this one is a boundary.
And that's concave.
And by a kind of symmetry, we're also going to get that one from the other side, the third of the three octants.
Well, we're off and running.
But we still have an awful lot to go.
And we could manage to deal with it by thinking about this object once again.
But instead of this situation out here, to turn it around and look at this vertex.
Think about the junctions that it can produce.
I think I'll do that for you.
Because you really have to play with this and move it around a little bit to see how things are going to look.
So let me think about how that's going to work out.
I know that one of the possibilities is going to look like so.
I might as well not hide that from you.
It's going to be what happens when there's a little man looking up at the junction.
And this one's going to be minus.
And now we've got two more that are just like that.
Look like so.
And you say, oops.
You say, aren't those just a rotational variance of each other?
And the answer is sure.
I write them all down, because if you get a fork-style junction in space, there are three different ways it could be labeled.
Depending on which of the lines you put the minus label on.
So that takes care of that.
And then there's one more of these fork-style junctions.
And that's plus, plus, minus that derives from this case.
And there appear to be three more of these L-style junctions.
And they look like, let's see, plus, then plus.
I'm having to think this through as I go.
And then-- and that's it.
Well, what about the T's?
Well, in this world, the only way you can get a T is if some object is obscuring another object.
And if an object is obscuring a line, it can be any line at all.
So that's why the four remaining ones are easy beyond description to label.
And of course, the cross pieces of the T are all boundary lines, with the obscuring object on the right.
Now let's see.
We've taken care now of the one, three, five, and seven octants filled cases.
What about two, four, and six?
Well, it turns out you can have vertexes that are made that way too.
But they will have more than three faces.
They'll have six faces.
They'll be like what happens when an object comes together at a point, like so.
You can play with it a little bit and see that if you have two, four, or six objects filled with stuff, there are more than three faces.
So we're going to ignore those.
So our constraint is going to be a little more severe than would be suggested by the terminology Huffman uses.
They're going to be trihedral all right, but they're also going to be three faces.
So we went to a lot of work there.
But what have we discovered?
We've discovered that in this world, this is a complete, 100% percent, nothing excluded, nothing else can be there, catalog of all possible ways the junctions can have line labels arranged around them.
There's nothing else in this world.
So that's a very powerful constraint.
So now let's see what we can do with it.
This example is usually more fun when the Red Sox are doing better, but they're not.
Yet we'll use it any way.
We're going to start with an object that looks like home plate.
And I'll ask you the question.
Can you build one of those?
I don't know.
Let's give it a shot.
We're going to assume that this object is hanging, floating in space.
So therefore, all of these lines around the boundary are boundary lines, like so.
Now that gets us off to a good-- it's just hanging in space, Christopher, all right?
You look confused.
It's just hanging in space so that all the lines around the edges are places where you see only one side has stuff on it.
So that enables us to just quickly run around the periphery and put arrow labels on all those outside lines.
Now we have a lot of arrow-style junctions on the boundary.
That's commonly the case.
So we can run over to our catalog of all possible labels, and we see that if we have an arrow with boundaries on its barbs, there's only one of those.
So I know instantly that there must be a plus on the shaft.
So we can come back here and take all these arrows here.
And label them with plus lines on their shafts.
Now a line can't change its nature along its length.
So if it's a plus line on one end, it's going to be a plus line on the other end.
So what else can we do?
Here deep inside is a fork-style junction.
It's got convex markers on both of those two lines.
So we go over to our catalog and say, what can we say about it, given that there are pluses on two of its lines?
Whoop, that means that the third one has to be a plus as well.
And now we're done.
We've labeled everything.
Except-- look at this.
What about that guy?
There's an L-style junction with pluses on both of its two lines.
Is there one of those in my catalog?
Therefore, I haven't passed a necessary condition for constructability in the world that I've made.
You can't make it.
You can't construct it.
So Huffman's ideas give us a way of testing something to see if it's not possible for it to be in this world.
If it passes the test, does that mean it's possible?
It's a necessary but not sufficient condition.
On this one-- blue-collar occupation-- on this one, maybe it will help if we put in another line.
For example, we could put a line like so.
You feel better about it now?
I don't know.
This has to be a plus for the same argument we used on several other arrows before.
That gives us an arrow-style junction here with a plus on everything.
Is there such a junction label?
It doesn't help.
You think you can make it, but you can't.
STUDENT: You could actually construct it as a 3-D object, though.
PATRICK WINSTON: He thinks you can construct it as a 3-D object.
Let me show you the next example, Christopher.
Consider this example.
Can you make that?
Your intuition is yes.
So let's label it.
Oh, I've already lost.
We just boost that up a little bit to make the situation more clear.
So already, I've got myself in a situation where I can't label that.
But you feel like you can make it.
So what's wrong?
What's wrong is-- what, Elliott?
STUDENT: You have an obscured-- or, we're presuming that we have an obscured [INAUDIBLE] alley from the upper-left corner to the [INAUDIBLE].
PATRICK WINSTON: Putting a little interpretation on what Elliott has said.
If you look at this situation back here, you get a four-faced junction there.
So you can make it.
But not with three faces.
So some of these look like you could make it.
But they can't be labeled because you need more than four faces at a junction.
And we can carry that idea back here.
You can make this OK.
But this junction, you've got two in the back and two here.
So it has four faces.
So that's Guzman's contribution.
That's Huffman's contribution.
Huffman was a mathematician.
But we wanted to build robots back in those days.
And neither one of these guys solved the problem of dealing with natural objects with shadows, with cracks, with more than trihedral vertexes in space, and what to do about that?
Well, that was a problem that another graduate student, David Waltz, set about to solve.
So Waltz decided that he would not be content unless he added cracks, shadows, non-trihedral vertexes.
Uh-- yeah, non-trihedral vertexes.
These considerations led Waltz to go from four labels to 50-plus.
Because he had to pack a lot of information into each of the labels he put on a line.
What kind of light was on the right?
What kind of light was on the left?
Maybe it's a crack.
Maybe it's a crack that-- all sorts of considerations.
Here we had 18 ways that lines can come together around junctions.
That went to thousands of junctions in Waltz's world.
So here's Guzman.
He writes a program that sort of works.
Down below, we have Huffman.
Huffman, who has a theory but solves the wrong problem.
So here comes Waltz, and he's trying to solve the right problem with a satisfying theory that has a generalizable principle.
So when we get all through this, we'll talk about criteria for success.
And we'll conclude that to have a really successful thing, you need a problem, to start with.
You need a method that works.
And you have to show that it works because of some principal.
So Guzman had the problem and something that worked.
Huffman had a method which worked on the wrong problem.
And it's left to Waltz to bring it all together.
So Waltz does all this work.
And now he has, instead at 18 labels, he has thousands.
Instead of four-line labels, he has more than 50.
So naturally, it becomes difficult to work these by hand.
We were able to work those Huffman examples by hand.
We started with labeling everything on the boundary and worked our way in.
There's no particular method there.
It was just easy to work out the puzzle.
But poor Waltz, he didn't have that luxury.
So he might have, in a typical scene, he might have tens or even hundreds of junctions to label and no easy way of dealing with it.
So naturally writes himself a depth-first search program.
So here is vertex, or rather junction number 1.
There are many choices for which label can be used on it.
And for each of those choices, whatever he's decided junction number 2 is has its own suite of possibilities.
And so it becomes a simple depth-first search problem, right?
So in actuality, as soon as Waltz-- he was my office mate at the time.
I can tell you this for a fact.
As soon as he wrote this program, he kept looking over at the computer-- they were big in those days.
They all had lights.
So you looked over at the computer to see if the lights were still blinking.
Because he'd start this depth-first search program up and nothing would happen.
He thought the computer had crashed.
Why did nothing happen?
Because the search base is exponential and much too big for an ordinary computer, or maybe even an ordinary universe.
So Waltz has to do something else.
He has to come up with a new method for using all these labels that he's-- after about a year and a half's worth of hard work, with lots of paper on his desk in little blocks.
After year and a half of hard work getting all these junction labels figured out, he then has to come up with a method for figuring out how to use them.
And so we don't know whether to think his biggest contribution was that label set or his method.
And probably both deserve about equal billing.
Oh, I don't know how to explain what Waltz did.
Well, one way is to do an example.
And I think I will hazard an example.
Let me find some space.
I think I'm reduced to going over here.
But that will be convenient, since the line labels are here.
Here's my example.
And you say, how can I give you just part of a picture?
Well, you can assume I'm looking at this through a window.
So the edge of the window form boundary lines, and they exert no constraint whatsoever on what's behind them.
So this is a legitimate drawing to have to think about.
By the way, is this ambiguous?
Or do you get a firm sense that there's a unique interpretation of all those lines?
I think there's a unique interpretation of all those lines.
What I'm going to do is I'm actually going to solve this problem using Huffman's labels but Waltz's method.
Because I can't simulate on the blackboard something with 50 line types and thousands of line junctions.
So I'm going to use Huffman's set to demonstrate Waltz's algorithm.
So Waltz's algorithm involves starting out by plopping on some junction all of the possible labels that the answer has to be drawn from.
So let me number these in the order that we're going to visit them.
And so far, I've just put down the three fork options that are resident on that first junction.
And I have to take note of exactly what they do with the lines that come out of the junction.
So let's see.
I'll just copy them down.
One possibility is this one.
Another possibility is this one.
And another possibility is plus, plus, minus.
Oops, I've got plus, plus.
No, that's right.
So that right so far?
All I've done is copy the junction labelings from my library.
And at this point, Waltz's algorithm says there's nothing else to do but go on to junction number two.
And unfortunately, sadly, there are lots of labelings that have to be considered on junction number 2.
Six of them.
1, 2, 3, 4, 5, 6.
So one of them looks like that.
Another one looks like that.
One of them is plus here, arrow in.
Another one is plus here, arrow out.
Another one is minus here, arrow down.
And minus here, arrow up.
I think I've copied those all right.
But now, having copied those down, Waltz's algorithm looks around at the neighboring junctions and says, are any of the things that I just placed on junction two disallowed by what I've already placed on a neighboring junction?
So it looks over here in step number two.
And it sees that these three arrows require the line that joins junctions 1 and 2 to be either minus or plus.
So of the six possibilities, I can only keep the ones that are likewise content to put a plus on that line that joins the two.
So that means that the influence flowing from junction 1 eliminates that one, eliminates that one, eliminates that one, and eliminates that one.
So half of them are gone.
All the ones that try to put a boundary line on that line between 1 and 2 are disallowed.
Now likewise, we could say, well, of the remaining ones, do they restrict what I can do at junction 1?
So let's see.
Here's a minus.
And here's a plus.
So all these possibilities over here are still alive.
So now, continuing on, we have to see what we can do at junction 3.
These are arrow labels again.
So we have to copy exactly the same labels set as we had before.
And now we look down at junction 2 and say, well, what does that tell me about the three that I've just placed?
If we look up from junction 2 to see what kind of constraints it puts on here, we have this one alive and this one alive.
I guess we've eliminated four of the six.
So we have these two alive.
And they both but boundary lines-- I think I must have had this boundary line wrong, right?
No, that's right.
Oh yes, I see.
This one goes-- hang on a second.
You let me do something wrong.
So plus is out.
And that must be one that goes-- this minus goes up.
I'm too hasty and uncertain about what I was doing.
So let's see.
This guy has a boundary going down.
And this guy has a boundary going up.
All of the others have been eliminated.
So that means that something that tries to put a concave line there is gone.
And something that tries to put a plus line there is gone.
So the influence flowing up in this direction in the third step eliminates that guy and eliminates that guy, leaving only this guy.
But now, the thing I was worried about is you have to also at this point go down to 2 and see if there's any further constraint on what can survive down there, based on what has happened over here at junction 3.
Now let's see.
This one goes up, which is compatible with a survivor.
But this one goes down, which is not compatible with a survivor.
So when I bring this down in step three, this guy is eliminated.
So now I'm down to just one interpretation for what can be going on at vertex number 2.
And one interpretation for vertex number 3.
Now let's see.
This can propagate.
So now that I've made a change on vertex number 2, I have to also see if that causes a change at vertex number 1.
So it's propagating through.
And now I can see that the only possibility here is a minus, the label that's coming down from our survivor.
So that eliminates these two.
It's hard to do this by hand, but I've got three of the four things labeled.
And even with just three of the four labeled, I'm down to a single interpretation for all of the junctions and the lines between them.
So there's one left.
We have to deal with that fork vertex.
We better deal with it, because for all we know, this is not a legal drawing in this world.
We have five fork vertexes to place.
But you know what?
I don't have to draw much here, because I know this is forced to be a plus now.
And this is forced to be a plus now.
And there's only one fork vertex with any pluses on it at all.
So now I can come through and say, well, the only possible survivor is this one.
These are gone.
And now I have an interpretation for all of the junctions.
And I see that the winners are this one.
And this one.
And this one.
And this one.
So I've got a unique interpretation.
This line is convex.
This one is concave.
This is a boundary.
That's a boundary.
And this line is convex, and that's convex.
Now that's a lot of work.
So I better check and make sure I got it right.
You'd like to see this demonstrated to make sure I haven't made a mistake.
I'm sure of that.
So each of the places where a line is obscured has four possibilities, labeled E. The arrow junctions are labeled A.
The forks-- there are five of them-- at the fork junction 5.
So let's just step through here and see what happens.
I've got it.
I did do it right.
So let's try some more.
What do you think will happen with this one?
Bug in my program?
It is genuinely ambiguous.
It can be something hanging down from the ceiling.
Or it could be something that we can think of as a step going up from left to right.
Let's look at something more complicated.
You think it'll work?
Not enough constraint for us to figure that one out.
It's equally ambiguous, but a little bit larger example.
What about this one?
Yeah, but the stuff is creeping up from the lower left up to the upper right.
It's variation on the same theme we had before.
But let me, just for fun, take these two lines out.
What do you think will happen now?
Seems to be doing just fine until it hits the upper right-hand corner and discovers it can't label stuff.
So it propagates back down.
And what looked OK in the lower left is no good after all.
So these results are kind of consistent with what we humans do when we look at these kinds of things.
So it's very likely that we, in our heads, do have some constraint propagation apparatus that we use in vision.
But putting that aside, we can think about other kinds of intelligence different from human, that might use this kind of mechanism to solve problems that involve a lot of constraint in finding a solution.
So here, we saw the constraint propagation activity at work on line drawing analysis.
But next time, what we're going do is we're going to see at work in map coloring.
And who cares about map coloring?
People who do scheduling, because that turns out to be the same problem.