AI_DL_Assignment / 5. OpenCV Tutorial - Learn Classic Computer Vision & Face Detection (OPTIONAL) /20. Thresholding (Binarization) - Making Certain Images Areas Black or White.srt
Prince-1's picture
Add files using upload-large-folder tool
17e2002 verified
1
00:00:01,360 --> 00:00:06,950
OK so let's not talk about trolling and dribbling is actually a very important open C-v function that
2
00:00:06,950 --> 00:00:12,100
is quite useful and you'll find we use it in so many of for many projects going forward.
3
00:00:12,120 --> 00:00:17,190
So what exactly is troubling troubling is converting an image to its binary form.
4
00:00:17,420 --> 00:00:19,520
But what does that mean exactly.
5
00:00:19,520 --> 00:00:25,880
So if you look at the function DCV to the Trishul function this gives you an idea of what to expect.
6
00:00:25,880 --> 00:00:28,640
So imagine we have the input image here.
7
00:00:29,050 --> 00:00:35,350
It Trishul value which is very important a max value and a threshold type.
8
00:00:35,440 --> 00:00:38,980
So I'm just going to quickly illustrate what happens in this function here.
9
00:00:39,250 --> 00:00:41,540
So let's look at his gray scale image here.
10
00:00:41,750 --> 00:00:46,760
And also please note all Trishul functions use grayscale images so images need to be converted.
11
00:00:46,810 --> 00:00:47,870
Integral scale before.
12
00:00:47,890 --> 00:00:49,200
Thresholding here.
13
00:00:49,750 --> 00:00:51,180
So this is grayscale image.
14
00:00:51,190 --> 00:00:55,410
It goes all the way from 0 to 255 at the bottom here.
15
00:00:55,810 --> 00:01:00,840
Let's assume this is a wheel midway point 127 that's over Trishul value.
16
00:01:01,210 --> 00:01:07,160
So and max value here is a value we want to set everything above that threshold.
17
00:01:07,390 --> 00:01:16,800
So in this example if this line here is 1:27 everything above it when we are going to 2:55 becomes 255.
18
00:01:16,870 --> 00:01:22,850
So this portion here becomes white and this push in above here becomes black which is zero.
19
00:01:23,380 --> 00:01:28,450
So it is different forms of travels which we see in the code but that just illustrates exactly what's
20
00:01:28,450 --> 00:01:29,410
happening here.
21
00:01:29,770 --> 00:01:35,140
There's also a type of Trishul and call adaptive thresholding which will come to an accord as well.
22
00:01:35,530 --> 00:01:40,780
And you may have noticed I used the word binary station here biner is Ishan or troubling refusing to
23
00:01:40,780 --> 00:01:48,720
see him doing it means converting to a fully greyscale image into just two points Max point and a loop
24
00:01:48,740 --> 00:01:53,320
when traditionally it's zero for a little point and to 55 for the max point.
25
00:01:53,320 --> 00:01:55,480
So white or black.
26
00:01:55,570 --> 00:01:55,860
OK.
27
00:01:55,870 --> 00:02:00,400
So let's take a look at implementing some of those Trishul methods or we just discuss.
28
00:02:00,400 --> 00:02:02,970
So as you can see it has five different thresholding methods.
29
00:02:02,970 --> 00:02:11,490
We're going to use here is binary binary inverse truncation Trisha's 0 tresses trash to zero inverse.
30
00:02:11,500 --> 00:02:14,940
So those are undiscovered and we can actually figure out exactly what each is doing.
31
00:02:17,260 --> 00:02:22,900
Or just to know that I actually said to Windows specifically here it isn't an open civies and so nice
32
00:02:22,900 --> 00:02:24,910
to automatically or do those windows.
33
00:02:24,990 --> 00:02:28,430
There are some C-v to move into functions that allow you to do that.
34
00:02:28,450 --> 00:02:30,560
But I'm not going to discuss that right now.
35
00:02:30,910 --> 00:02:32,470
So anyway back to thresholding.
36
00:02:32,560 --> 00:02:34,520
So this is our original image here.
37
00:02:35,140 --> 00:02:40,500
And remember from the slides I said we said 127 to be the Trishul value.
38
00:02:40,840 --> 00:02:46,230
So in Trishul binary everything that's below 127 which is of value be used in our code.
39
00:02:46,480 --> 00:02:51,480
Hopefully you remember that goes to black and everything above that goes to white.
40
00:02:51,520 --> 00:02:57,160
So Trishul binary Inv. actually and undecidedly does it do.
41
00:02:57,200 --> 00:02:59,310
Opposite the inverse of that.
42
00:02:59,380 --> 00:03:06,670
So everything docket and 1:27 goes to white and everything higher than 127 goes to black.
43
00:03:06,760 --> 00:03:10,650
Now trust trunk there's something a little bit different.
44
00:03:10,720 --> 00:03:16,360
What it does is that it takes everything that's actually brighter or higher than 1:27 going to Swee
45
00:03:17,080 --> 00:03:24,890
and Cupps it at 127 which is why everything just stops a disgrace here and continues along the screen.
46
00:03:25,240 --> 00:03:30,520
So what about G-0 0 0 actually does something of the opposite here.
47
00:03:30,880 --> 00:03:37,620
Everything that's actually below 127 actually gets capped to black similarly to binary here.
48
00:03:37,690 --> 00:03:40,770
However it leaves everything above 127 Lewan.
49
00:03:41,260 --> 00:03:46,490
So it's a nice effect can be useful sometimes and Trisha's 0.
50
00:03:46,550 --> 00:03:49,220
Invis actually does the opposite.
51
00:03:49,690 --> 00:03:53,950
So as you can see it maintains this color here.
52
00:03:53,950 --> 00:04:01,330
This is the initial 0 to 127 part but everything above 127 just like in Trishul binary invis goes to
53
00:04:01,330 --> 00:04:03,430
black.
54
00:04:03,530 --> 00:04:05,280
So that's close these windows now.
55
00:04:05,560 --> 00:04:11,730
And we can actually just quickly look at it could you remember the input images of Fu's here.
56
00:04:12,080 --> 00:04:16,750
57
1:27 is a Trishul value 255 is the max value set.
58
00:04:16,760 --> 00:04:20,450
That's de-valued cause too when it's above that Trishul or vice versa.
59
00:04:20,900 --> 00:04:25,320
Zero is actually used in the opposite case for most of these Tresor log algorithms.
60
00:04:25,730 --> 00:04:29,650
And this here fresh binary This is where we defined threshold type.
61
00:04:29,650 --> 00:04:30,930
We want to use.
62
00:04:30,950 --> 00:04:34,760
So it's a simple argument function CB2 Trishul.
63
00:04:34,880 --> 00:04:36,400
Hope you have fun using it.
64
00:04:37,870 --> 00:04:43,750
So you may have fun with that one weakness of these Tressell algorithms is ID all require us to set
65
00:04:43,750 --> 00:04:47,710
the value at 127 or whatever value we wish to use.
66
00:04:47,710 --> 00:04:54,370
No that's not convenient when you're actually doing it with Lexie's scanned documents or anything of
67
00:04:54,370 --> 00:04:55,130
the sort.
68
00:04:55,420 --> 00:04:57,430
So is there a better way of doing this.
69
00:04:57,430 --> 00:04:58,320
And yes it is.
70
00:04:58,330 --> 00:05:02,300
It's called adaptive thresholding and I have a slide in a presentation.
71
00:05:02,310 --> 00:05:03,890
We'll discuss these methods here.
72
00:05:04,210 --> 00:05:06,840
But there's quite a few adaptive thresholding methods.
73
00:05:06,850 --> 00:05:16,780
Use an open C-v is adaptive mean trash is OS2 his method which is quite popular and is Gosia or Austin's
74
00:05:16,780 --> 00:05:17,490
method.
75
00:05:17,860 --> 00:05:21,400
So let's run this code and we can actually see what's going on here.
76
00:05:22,210 --> 00:05:24,530
So this is the original image we're looking at.
77
00:05:24,530 --> 00:05:26,880
It's Charles Darwin version of species.
78
00:05:27,310 --> 00:05:29,790
So that's the original image.
79
00:05:29,830 --> 00:05:36,020
This here is a regular Trishna binary Trishul that previously used as you can see it's good.
80
00:05:36,100 --> 00:05:42,640
It's not bad but if you wanted to get this text book we would have had to use maybe a low or high value
81
00:05:42,640 --> 00:05:45,690
of 127.
82
00:05:45,720 --> 00:05:50,880
So this is it here with adaptive martially as you can see you can compare directly to this image and
83
00:05:50,880 --> 00:05:53,140
you can see the text is a lot more clear.
84
00:05:53,460 --> 00:05:57,490
So it setting a Trishul a value of 127 or anything of the like.
85
00:05:57,600 --> 00:05:59,520
It actually does a better job already.
86
00:05:59,820 --> 00:06:02,300
So we can all his method do a better job.
87
00:06:02,850 --> 00:06:03,480
Perhaps it can.
88
00:06:03,480 --> 00:06:05,810
I mean there's not much difference separating these images.
89
00:06:06,060 --> 00:06:09,670
But in my experience his method actually is quite handy.
90
00:06:09,690 --> 00:06:11,740
What about Astor's Gaussian method.
91
00:06:12,840 --> 00:06:17,280
Again this actually looks very similar it is on the onto the differences between these images here.
92
00:06:17,490 --> 00:06:27,370
However in your own image data set you may want to actually play and try these different logarithms.
93
00:06:27,430 --> 00:06:31,170
So let's listen a bit more about the adaptive treacly methods that we just saw.
94
00:06:31,450 --> 00:06:33,750
So the first one we saw was adaptive Trishul.
95
00:06:34,120 --> 00:06:35,010
And as you can.
96
00:06:35,050 --> 00:06:39,520
As you remembered adaptive turtling has a big advantage in that it reduces the uncertainty in setting
97
00:06:39,520 --> 00:06:40,630
a Trishul value.
98
00:06:40,840 --> 00:06:46,600
So the input does nutritional value in these parameters here is a max value which is 2:55 the adaptive
99
00:06:46,600 --> 00:06:50,700
type Trishul type block size which needs to be in odd numbers.
100
00:06:50,710 --> 00:06:57,390
One of those weird pensively quirks and a constant and lot of open civic work that needs to be said
101
00:06:57,400 --> 00:07:02,230
that faith Well traditionally five you can experiment with different values and if you get better results
102
00:07:02,410 --> 00:07:02,940
that's good.
103
00:07:03,900 --> 00:07:10,820
So that's quickly going.
104
00:07:10,840 --> 00:07:11,950
So these are the values here.
105
00:07:11,950 --> 00:07:16,360
So this is the adaptive type and I believe this is the only type available for dysfunction right now
106
00:07:17,140 --> 00:07:20,710
and this is the troubling type we use here as well.
107
00:07:20,710 --> 00:07:25,800
And these are the blocks and the constant here and that give us the results we saw earlier.
108
00:07:25,930 --> 00:07:27,480
So let's go back to a presentation now
109
00:07:30,720 --> 00:07:35,490
and they actually just misspoke when I just said adaptive trust means see was the only adaptive threshold
110
00:07:35,490 --> 00:07:42,690
type we could use in this function is actually adaptive Shesh Gaussians see which as you may remember
111
00:07:42,690 --> 00:07:46,930
is a weighted sum of neighborhood pixels under that Gaussian window.
112
00:07:46,940 --> 00:07:51,860
So let's discuss OS2 which is actually one of the best adaptive freshly methods.
113
00:07:51,890 --> 00:07:54,510
So what OS2 does is that it tries to find.
114
00:07:54,590 --> 00:07:59,360
Well it looks at the histogram of the range of intensities in the image here and it tries to find the
115
00:07:59,360 --> 00:08:05,930
peaks or the moods of that of the histogram here and then it actually finds a value that separates these
116
00:08:05,930 --> 00:08:06,770
histograms.
117
00:08:06,770 --> 00:08:14,100
The best value I can separate is two histograms that you actually get the best thresholding value here.
118
00:08:14,750 --> 00:08:19,490
So in most cases where you have changes in light intensity I would encourage you to use one of these
119
00:08:19,490 --> 00:08:24,690
thresholding adaptive gentling algorithms AWST Atsuko is actually quite good.
120
00:08:24,710 --> 00:08:30,470
However if your application can use a simple thresholding algorithm that we saw before Dewes maybe faster
121
00:08:30,470 --> 00:08:32,790
so maybe you should just go for one of those.
122
00:08:32,810 --> 00:08:35,300
Again it depends on the use case and you'll see going forward.
123
00:08:35,300 --> 00:08:39,270
We actually do use different methods in many projects.