Let us now present a very simple extension of histogram equalization which

is called histogram matching. So let us illustrate the problem.

We saw before, histogram equalization where we take any histogram, any pixel

distribution, and we match it to something which is as uniform as

possible. But imagine that we have this pixel

distribution, which is the one we have seen before, and somebody comes and tells

us, this is your target. I don't want to do an equalization.

I want you to finish with a histogram which is as close as possible to this

one. So the idea is as before, we're going to

have to find a map, which is written here.

This is the map that we have been doing before.

A map such that from here from this distribution we can go to as close as

possible to this one in this craze, being the way that I'm going to describe

in a second. What we are going to obtain is this,

which is very similar, not exactly, but very, very similar.

We already saw in the previous video that we cannot always get exactly the

specified histogram. In the previous video, was equalized.

But we can get very close to it. And this is what we see here.

So how do we do that? You already have all the tools to do

that. Let me illustrate how.

We start from the distribution of the current image.

Whatever that distribution is, it's the image that is given to you.

You know how to map that to a uniform distribution.

Okay? Now, you are giving a desire distribution.

You know how to map this desired distribution, the target distribution

also to a uniform distribution. Therefore, if you know how to go from

here to here and from here to here, if you invert this, you know how to go

all the path that is the desired path. So, you're going to map a pixel value

from here to here, then you're going to ask, okay, where is

this pixel coming from, this pixel value coming from when I want to go here, and

you just invert that. So, you basically have one map and our

map and you just invert the second map. So let's say that pixel value a, a pixel

with a gray value seven goes to ten here. Then you ask, okay, who, from here.

What peaks a value, one to ten, and somebody, you know, this map tells you

fifteen. So you end up going from seven to ten,

and inverse of ten is fifteen, so you went from seven to fifteen.

And that's how you basically get a histogram matching.

Just by doing the histogram equalizations, now you know how to match

any two desired distributions. There's one caveat, as we saw in the

previous video, the, the maps don't have to be one to one.

So, maybe there is more than one pixel value here that ends up at the same pixel

value there. So, when you go from seven, let's say to

ten, maybe there is fifteen, from here goes to ten.

And maybe also twenty goes to ten. So.

Am I going to map seven to fifteen or I'm going to map seven to twenty?

You're going to have to make a decision. The most common decision is to pick the

one that is closest to the original, so you do the less deformation of the pixel

values of the image. But you can make other decisions, as long

as those decisions are consistent and as long as those decisions guarantee that

you end up with an increase in function. Remember that we don't want to flip pixel

values. So once again, you do two histogram

equalizations, you invert one of them. And then you basically obtain histogram

matching. So let's see how that works.

This is a particular example. We have a very dark image here.

And we see that, in the histogram mostly dark values are used.

So it's hard for us to see what's going on here, because it's very, very dark.

If we do histogram equalization, we get a too bright image as we see here.

This is actually the mapping, the T R mapping that we always are looking for.

And this is going to be the new histogram.

And we see both from the histogram and from the actual image that it's way too

bright. So we haven't achieved what we really

wanted which is a nicer looking image that we can actually observe the

different regions of that image. If you still have that, we do histogram

matching so if somebody comes and tells us I know that this is the distribution

that is going to be great for my image. Then what we do is again, we go form the

original distribution to equalization. We go from, this distribution, the new

distribution here, we go to equalization, which is, going to be this map.

We invert that map, which is going to be this.

And then we go in two steps from the original histogram to the equalized one.

From the equalized one through the inverse map to the new pixel value.

And we get this distribution, which gives us this image, which looks much nicer

than this one and also help us to look at some of its details.

So we basically got histogram matching by doing twice histogram equalization.

Once direct and the other which is inverted.

And again, if we have ambiguities we just make a decision by using for example, the

pixel value closest to the one that we started in the original image.

So you got two for the price of one. If you know how to do histogram

equalization, you know how to do histogram matching.

Of course, there is a big art, in designing your target histogram and

that's very application dependent. Let's just mention one last thing about

histogram equalization or histogram matching.

So far, we considered the whole image, and we say, let's just look at the whole

image, let's look at the distribution, and let's match those pixel distributions

to a new distribution, either an equalization or a specified distribution.

You can do the same operations locally. So for example, if we take this, and we

do histogram, global histogram equalization, we're going to get this.

Sometimes it looks a bit better, but there is a compromise.

I only have 256 pixel values to distribute for my whole image.

So, I may not be able to do a very strong contrast at the same time here and here.

So, the way to solve this is to basically consider regions and say,

let just do histogram equalization for example of this region and let's do

histogram equalization of this region. They can actually be overlapping and we

are going to treat each region independently.

And maybe by doing that, I can basically improve the contrast in every region in

the image, when there is a large variability, like in this particular

image. This is the result of that and I want you

for example to concentrate on this region.

How it's very hard to see the details here.

They don't look much better here, but they do look much better here.

Now, in this region, there's not a lot of details.

The global did manage to do a good job but not in this region.

Global histogram equalization or global histogram matching is a compromise

between everything that we see in the image.

We can try to overcome, at least partially, that compromise by doing this

local operation. And now we see that you can get details

here, we can also get details here. So, in the different regions of the

image, they have very different pixel values and we can still do a basically a

histogram stretching and get much better contrast in the different regions.

By this, we basically conclude our unit, our portion on histogram equalization and

histogram matching, a very simple operation, and very useful.

See you in the next video. Thank you.