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.