در این مطلب، ویدئو آموزش OpenCV Python – یافتن خطوط برای خودروهای خودران (آموزش مبانی بینایی کامپیوتر) با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,030 –> 00:00:01,979
سلام به همه در این آموزش من
2
00:00:01,979 –> 00:00:04,080
به شما یاد می دهم که از
3
00:00:04,080 –> 00:00:05,850
تکنیک های بینایی کامپیوتری موثر با CV باز و
4
00:00:05,850 –> 00:00:08,400
پایتون در نهایت برای تشخیص خطوط خطوط
5
00:00:08,400 –> 00:00:10,769
برای یک ماشین خودران شبیه سازی شده استفاده کنید این
6
00:00:10,769 –> 00:00:12,660
ویدیو با همکاری
7
00:00:12,660 –> 00:00:14,490
کانال دانش برنامه نویسی YouTube
8
00:00:14,490 –> 00:00:16,260
و تا پایان کار انجام شده است این آموزش
9
00:00:16,260 –> 00:00:17,520
اگر به مطالب بیشتر در مورد خودروهای خودران علاقه مند هستید،
10
00:00:17,520 –> 00:00:19,529
می
11
00:00:19,529 –> 00:00:20,880
توانید به لینک موجود در توضیحات
12
00:00:20,880 –> 00:00:22,949
زیر مراجعه کنید، اما بدون هیچ مقدمه ای بیایید
13
00:00:22,949 –> 00:00:26,130
این آموزش
14
00:00:26,130 –> 00:00:28,560
15
00:00:28,560 –> 00:00:29,820
را شروع کنیم.
16
00:00:29,820 –> 00:00:31,769
نصب توزیع آناکوندا است،
17
00:00:31,769 –> 00:00:34,290
ما این کار را با رفتن به
18
00:00:34,290 –> 00:00:41,670
آناکوندا دات کام شروع می کنیم / توزیع آناکوندا را دانلود کنید به
19
00:00:41,670 –> 00:00:43,800
راحتی برنامه نوت بوک python را نصب می کند
20
00:00:43,800 –> 00:00:46,829
21
00:00:46,829 –> 00:00:47,940
که ما اغلب
22
00:00:47,940 –> 00:00:49,860
در طول این دوره و بیش از
23
00:00:49,860 –> 00:00:51,690
صدها مورد استفاده قرار خواهیم داد. پنجاه بسته علمی دیگر
24
00:00:51,690 –> 00:00:54,570
از آنجایی که ما پایتون را
25
00:00:54,570 –> 00:00:57,239
برای مک نصب می کنیم، حتما به بخش مک بروید
26
00:00:57,239 –> 00:00:59,809
27
00:01:05,239 –> 00:01:08,659
و ما پایتون 3 را نصب می کنیم. t
28
00:01:08,659 –> 00:01:11,540
Python 2 به احتمال زیاد
29
00:01:11,540 –> 00:01:13,760
نسخه های مختلف پایتون و
30
00:01:13,760 –> 00:01:15,140
نسخه هایی را که من در حال حاضر می بینم مشاهده می کنید،
31
00:01:15,140 –> 00:01:18,830
اما صرف نظر از اینکه پایتون 2
32
00:01:18,830 –> 00:01:21,259
دیگر به روز نمی شود، ضروری است
33
00:01:21,259 –> 00:01:23,140
که آخرین نسخه
34
00:01:23,140 –> 00:01:26,630
پایتون 3 را دانلود کنید تا با پایتون آینده سازگاری داشته باشید.
35
00:01:26,630 –> 00:01:29,540
بهبودها و همچنین برای
36
00:01:29,540 –> 00:01:32,540
دنبال کردن همراه با این دوره روی
37
00:01:32,540 –> 00:01:39,880
دکمه دانلود کلیک کنید نه با تشکر
38
00:01:40,330 –> 00:01:43,250
پس از پایان دانلود شما این بسته باز می شود.
39
00:01:43,250 –> 00:01:47,179
40
00:01:47,179 –> 00:01:50,479
41
00:01:50,479 –> 00:01:52,070
42
00:01:52,070 –> 00:01:54,590
43
00:01:54,590 –> 00:01:59,270
44
00:01:59,270 –> 00:02:02,450
کامل است ادامه را فشار دهید دوباره ببندید
45
00:02:02,450 –> 00:02:06,350
و به سطل زباله بروید که بسیار آسان و
46
00:02:06,350 –> 00:02:08,330
شهودی است تا مطمئن شوید که
47
00:02:08,330 –> 00:02:09,949
هر پنجره ترمینالی
48
00:02:09,949 –> 00:02:13,160
که قبلاً باز
49
00:02:13,160 –> 00:02:15,519
50
00:02:15,519 –> 00:02:17,930
کرده بودید کار می کند. یکی را باز داشته باشید، پس شما
51
00:02:17,930 –> 00:02:20,060
باید خوب باشید، کاری که ما انجام خواهیم داد این است که
52
00:02:20,060 –> 00:02:22,070
با
53
00:02:22,070 –> 00:02:25,070
انجام یک جستجوی نورافکن، یک پنجره ترمینال جدید را باز می کنیم، کارهایی که می
54
00:02:25,070 –> 00:02:29,470
توانید قبل از آن انجام دهید. دستور ssing +
55
00:02:30,440 –> 00:02:35,740
ترمینال سمت راست را فشار دهید و Enter را فشار دهید،
56
00:02:39,380 –> 00:02:41,870
می توانید
57
00:02:41,870 –> 00:02:44,590
با فشردن f4 و
58
00:02:44,590 –> 00:02:46,940
جستجو در اینجا به ترمینال خود دسترسی پیدا کنید، اما
59
00:02:46,940 –> 00:02:48,680
صرف نظر از نصب موفقیت آمیز
60
00:02:48,680 –> 00:02:52,630
، دستور Python 3
61
00:02:52,630 –> 00:02:57,010
نسخه دو خط تیره را بنویسید
62
00:03:00,920 –> 00:03:04,010
و من نسخه سه نقطه شش را دریافت می کنم.
63
00:03:04,010 –> 00:03:06,470
نکته چهار مطمئن شوید که یک
64
00:03:06,470 –> 00:03:09,500
نسخه Python 3 را نیز دریافت کرده اید که امیدواریم
65
00:03:09,500 –> 00:03:11,239
بتوانی آن را دنبال کنی
66
00:03:11,239 –> 00:03:13,489
اگر مشکلی در نصب
67
00:03:13,489 –> 00:03:15,760
دارید در بخش پرسش و پاسخ از من بپرسید به
68
00:03:15,760 –> 00:03:18,200
بازگشت خوش آمدید.
69
00:03:18,200 –> 00:03:19,730
ویرایشگر در بخش بینایی کامپیوتر
70
00:03:19,730 –> 00:03:21,830
می توانید با
71
00:03:21,830 –> 00:03:24,560
خیال راحت از هر ویرایشگر متنی که می خواهید مانند sublime یا vim استفاده کنید،
72
00:03:24,560 –> 00:03:26,750
در این صورت می توانید از این
73
00:03:26,750 –> 00:03:29,269
درس صرف نظر کنید در غیر این صورت اگر هیچ
74
00:03:29,269 –> 00:03:31,599
ویرایشگر متنی نصب نکرده اید، بیایید آن را
75
00:03:31,599 –> 00:03:34,100
دانلود کنید بسیار ساده است. هم برای
76
00:03:34,100 –> 00:03:36,739
مک و هم برای ویندوز،
77
00:03:36,739 –> 00:03:38,569
نصب مک را با رفتن به
78
00:03:38,569 –> 00:03:44,480
Adam dot IO و در داخل atom dot IO ادامه میدهم و
79
00:03:44,480 –> 00:03:47,569
فقط روی دانلود کلیک کنید، این نیز
80
00:03:47,569 –> 00:03:50,390
از نقطه فناوری توسط al قابل دانلود است.
81
00:03:50,390 –> 00:03:53,090
بنابراین به گوگل بروید و سپس
82
00:03:53,090 –> 00:03:58,580
دانلود اتم فناوری نقطهای را جستجو کنید و
83
00:03:58,580 –> 00:04:02,000
به اولین پیوند بروید، در صورتی که فقط
84
00:04:02,000 –> 00:04:04,130
روی پیوند مناسب کلیک کنید و سپس
85
00:04:04,130 –> 00:04:05,630
منتظر بمانید تا تنظیمات بارگیری به پایان برسد،
86
00:04:05,630 –> 00:04:07,400
چه در مک یا
87
00:04:07,400 –> 00:04:12,530
ویندوز باشید.
88
00:04:12,530 –> 00:04:14,150
نصب کامل شد، باید داخل پوشه دانلودهای شما باشد،
89
00:04:14,150 –> 00:04:16,519
اجازه دهید فقط اتم را باز
90
00:04:16,519 –> 00:04:20,720
کنیم و
91
00:04:20,720 –> 00:04:24,260
ببینیم این برنامه جدید چگونه است، ما
92
00:04:24,260 –> 00:04:28,370
آن را کاملاً باز می
93
00:04:28,370 –> 00:04:30,440
کنیم، موارد زیر را می بندیم و سپس آنچه را که می
94
00:04:30,440 –> 00:04:34,310
خواهیم انجام دهید این است که روی بسته ها کلیک کنید و در
95
00:04:34,310 –> 00:04:35,510
داخل بسته ها ما به تنظیمات شما می رویم
96
00:04:35,510 –> 00:04:41,720
و
97
00:04:41,720 –> 00:04:44,000
اگر از رایانه شخصی استفاده
98
00:04:44,000 –> 00:04:45,440
می کنید تنظیمات را باز
99
00:04:45,440 –> 00:04:48,440
100
00:04:48,440 –> 00:04:52,250
می کنیم. تغییر برخی تنظیمات به عنوان مثال
101
00:04:52,250 –> 00:04:54,860
خانواده فونت من کاملا از
102
00:04:54,860 –> 00:04:58,729
فونت فعلی راضی هستم و اندازه فونت 16 بسیار معقول به نظر می رسد
103
00:04:58,729 –> 00:05:01,580
و دو کادر دیگر که
104
00:05:01,580 –> 00:05:04,100
دوست دارم علامت بزنم
105
00:05:04,100 –> 00:05:06,889
نشانگر مکان نما در هنگام انتخاب و نشان دادن
106
00:05:06,889 –> 00:05:09,919
نشانگر تورفتگی هستند. تورفتگی
107
00:05:09,919 –> 00:05:12,470
برای کد پایتونیک اساسی است زیرا
108
00:05:12,470 –> 00:05:14,030
بین بلوکهای مختلف کد تمایز قائل میشود،
109
00:05:14,030 –> 00:05:16,610
بنابراین قطعاً
110
00:05:16,610 –> 00:05:19,400
داشتن نشانگرهای تورفتگی مفید خواهد بود
111
00:05:19,400 –> 00:05:21,770
و در نهایت یک چیز دیگر که بسیار
112
00:05:21,770 –> 00:05:25,849
مهم است این است که طول
113
00:05:25,849 –> 00:05:28,340
تب طول تب پیشفرض باید 2 باشد، اما من
114
00:05:28,340 –> 00:05:30,800
شخصاً ترجیح میدهم از 4 فاصله در هر برگه استفاده کنم
115
00:05:30,800 –> 00:05:33,229
و فقط یک کار دیگر که میخواهم
116
00:05:33,229 –> 00:05:37,250
قبل از حرکت انجام دهم فعال کردن ذخیره خودکار است، بنابراین
117
00:05:37,250 –> 00:05:40,909
به بستهبندی برمیگردیم و این
118
00:05:40,909 –> 00:05:43,340
در کد ما بسیار راحت خواهد بود، زیرا
119
00:05:43,340 –> 00:05:45,200
ما را از ذخیره کردن کد خود در هر برگه باز میدارد.
120
00:05:45,200 –> 00:05:47,060
زمانی که باید آن را اجرا کنیم،
121
00:05:47,060 –> 00:05:49,960
کاری که ما انجام خواهیم داد این است که داخل بسته های اصلی به
122
00:05:49,960 –> 00:05:53,050
پایین اسکرول کنید تا زمانی که ذخیره خودکار
123
00:05:53,050 –> 00:05:56,479
را در اینجا پیدا کنید و مطمئن شوید که
124
00:05:56,479 –> 00:05:58,780
آن را فعال کرده اید، من قبلاً آن را فعال کرده
125
00:05:58,780 –> 00:06:01,250
ام و این کار قسمت
126
00:06:01,250 –> 00:06:04,240
نصب را
127
00:06:05,550 –> 00:06:07,530
به هدف این بخش به پایان می رساند.
128
00:06:07,530 –> 00:06:09,780
ساختن برنامه ای است که می تواند خطوط خطوط را
129
00:06:09,780 –> 00:06:12,389
در یک تصویر یا یک ویدیو شناسایی کند، زمانی که من و
130
00:06:12,389 –> 00:06:14,699
شما یک ماشین را رانندگی می کنیم، می توانیم ببینیم که
131
00:06:14,699 –> 00:06:17,580
خطوط خطوط در کجا از یخ ما استفاده می کنند، یک ماشین
132
00:06:17,580 –> 00:06:19,919
یخ ندارد. و اینجاست که بینایی کامپیوتری به وجود
133
00:06:19,919 –> 00:06:22,080
میآید که از طریق
134
00:06:22,080 –> 00:06:24,180
الگوریتمهای پیچیده به رایانه کمک میکند تا
135
00:06:24,180 –> 00:06:26,759
دنیا را همانطور که در مورد ما انجام میدهیم ببیند، ما
136
00:06:26,759 –> 00:06:28,050
از آن برای دیدن جاده
137
00:06:28,050 –> 00:06:30,300
و شناسایی خطوط خطوط در یک سری از
138
00:06:30,300 –> 00:06:32,819
تصاویر دوربین استفاده
139
00:06:32,819 –> 00:06:34,710
خواهیم کرد. تنها کاری که ما می خواهیم
140
00:06:34,710 –> 00:06:36,389
انجام دهیم این است که مراحل
141
00:06:36,389 –> 00:06:39,990
اولیه پروژه خود را تنظیم کنیم و تصویری را نمایش
142
00:06:39,990 –> 00:06:41,669
دهیم که در آن خطوط خط را شناسایی می کنیم و
143
00:06:41,669 –> 00:06:43,860
با باز کردن ترمینال یا خط فرمان خود شروع می کنیم
144
00:06:43,860 –> 00:06:46,740
و به دایرکتوری دسکتاپ هدایت می کنیم.
145
00:06:46,740 –> 00:06:49,669
با دستور سی دی
146
00:06:49,669 –> 00:06:53,069
دسکتاپ تغییر دسکتاپ rectory
147
00:06:53,069 –> 00:06:55,050
در داخل دسکتاپ ما یک
148
00:06:55,050 –> 00:06:58,050
پوشه جدید با دستور mkdir ایجاد
149
00:06:58,050 –> 00:07:03,210
دایرکتوری ایجاد خطوط این پوشه
150
00:07:03,210 –> 00:07:05,340
را که در داخل دسکتاپ درست کردید،
151
00:07:05,340 –> 00:07:08,690
با رفتن به فایل open desktop با اتم
152
00:07:08,690 –> 00:07:14,159
باز می کنید. یافتن طول ها به جای
153
00:07:14,159 –> 00:07:16,259
یافتن خطوط، یک فایل پایتون جدید
154
00:07:16,259 –> 00:07:20,610
به نام lanes py
155
00:07:20,610 –> 00:07:22,620
در داخل فایل lanes بسازیم، ما
156
00:07:22,620 –> 00:07:24,240
با نوشتن برنامه ای شروع می کنیم که می
157
00:07:24,240 –> 00:07:28,020
تواند خطوط را در یک تصویر JPEG شناسایی کند.
158
00:07:28,020 –> 00:07:30,389
ccess
159
00:07:30,389 –> 00:07:32,819
حتما به لینک زیر بروید
160
00:07:32,819 –> 00:07:34,409
لینک در توضیحات زیر نیز موجود است
161
00:07:34,409 –> 00:07:37,169
و پس از اینکه به
162
00:07:37,169 –> 00:07:40,110
این صفحه github رسیدید روی تصویر آزمایشی JPEG کلیک کنید
163
00:07:40,110 –> 00:07:43,650
و کاری که ما انجام می دهیم این است که در واقع
164
00:07:43,650 –> 00:07:45,990
تصویر را دانلود کنید یا بهتر است فقط
165
00:07:45,990 –> 00:07:49,530
ذخیره کنید. تصویر را ذخیره کنید و مطمئن شوید که آن را
166
00:07:49,530 –> 00:07:52,439
به عنوان یک تصویر JPEG ذخیره کنید، مهم نیست آن را در
167
00:07:52,439 –> 00:07:54,930
کجا ذخیره می کنید و مطمئن شوید که این تصویر آزمایشی را نشان می
168
00:07:54,930 –> 00:07:57,449
دهد به طوری که هیچ
169
00:07:57,449 –> 00:07:59,669
یا دو مورد اضافی در آن وجود نداشته باشد، به طوری که شما نام گذاری
170
00:07:59,669 –> 00:08:01,830
می کنید مطابق با آنچه من هستید باشد.
171
00:08:01,830 –> 00:08:06,479
پس از دانلود در هر کجا که دانلود کردید تصویر خود را ذخیره کنید
172
00:08:06,479 –> 00:08:08,280
173
00:08:08,280 –> 00:08:10,050
، مطمئن شوید که آن را به
174
00:08:10,050 –> 00:08:12,900
پوشه پروژه خود بکشید و اکنون برای
175
00:08:12,900 –> 00:08:14,580
نمایش تصویر، از
176
00:08:14,580 –> 00:08:17,789
CV باز یک کتابخانه بینایی کامپیوتری منبع باز استفاده می کنیم.
177
00:08:17,789 –> 00:08:22,409
در ترمینال شما
178
00:08:22,409 –> 00:08:24,830
دستوری را می نویسیم که pip
179
00:08:24,830 –> 00:08:27,990
install از پیپ مدیر بسته
180
00:08:27,990 –> 00:08:35,000
برای نصب OpenCV – TREB – python استفاده می کند،
181
00:08:35,030 –> 00:08:36,620
اگر آن را به ویژوال
182
00:08:36,620 –> 00:08:39,220
استودیو برگرداند، CV کتابخانه را
183
00:08:39,220 –> 00:08:43,549
به و از این وارد می کنیم. کتابخانه در حال حاضر ما
184
00:08:43,549 –> 00:08:46,430
به توابع دسترسی خواهیم داشت Emory و M
185
00:08:46,430 –> 00:08:49,460
نشان می دهد برای بارگذاری تصویر ما ابتدا
186
00:08:49,460 –> 00:08:51,770
از تابع خواندن M استفاده می کنیم با تنظیم
187
00:08:51,770 –> 00:08:57,080
تصویر برابر با CB – نقطه M خواندن و در
188
00:08:57,080 –> 00:08:58,700
این آرگومان جایی است که شما
189
00:08:58,700 –> 00:09:02,450
نام فایل را به عنوان یک رشته به تصویر مشخص می کنید. مال ما
190
00:09:02,450 –> 00:09:09,140
تست نقطه JPEG تصویر است و کاری که این
191
00:09:09,140 –> 00:09:11,270
تابع انجام خواهد داد این است که تصویر را از
192
00:09:11,270 –> 00:09:13,220
فایل ما بخواند و آن را به صورت یک
193
00:09:13,220 –> 00:09:16,310
آرایه numpy چند بعدی
194
00:09:16,310 –> 00:09:18,410
حاوی شدت نسبی هر پیکسل
195
00:09:18,410 –> 00:09:20,900
در تصویر برگرداند، اکنون داده های تصویر خود را
196
00:09:20,900 –> 00:09:23,150
به صورت یک عدد در سمت راست داریم. مرحله بعدی این است که
197
00:09:23,150 –> 00:09:24,770
در واقع آن را با تابع M show رندر کنیم،
198
00:09:24,770 –> 00:09:30,610
بنابراین ما می نویسیم C v2 dot M نشان می دهد که
199
00:09:30,610 –> 00:09:33,290
این در دو آرگومان طول می کشد،
200
00:09:33,290 –> 00:09:35,000
اولی نام پنجره ای است که می
201
00:09:35,000 –> 00:09:36,710
خواهیم باز کنیم و فقط آن را صدا می کنیم. یک
202
00:09:36,710 –> 00:09:39,230
نتیجه و آرگومان دوم
203
00:09:39,230 –> 00:09:43,340
تصویری است که می خواهیم خود را نشان دهیم اگر
204
00:09:43,340 –> 00:09:46,490
کد را اکنون در ترمینال
205
00:09:46,490 –> 00:09:49,010
خود اجرا کنم با نوشتن سی دی به پوشه پروژه من بروید پروژه ما
206
00:09:49,010 –> 00:09:52,430
به نام یافتن خطوط است و
207
00:09:52,430 –> 00:09:56,710
فایل پایتون را اجرا کنید python elaine’s dot py
208
00:09:56,710 –> 00:09:59,680
توجه کنید که هیچ چیز نیست قرار است اتفاق بیفتد
209
00:09:59,680 –> 00:10:02,240
که s به دلیل اینکه این تابع باید
210
00:10:02,240 –> 00:10:05,870
با تابع کلید وزن c v2
211
00:10:05,870 –> 00:10:08,720
کلید وزن نقطه دنبال شود و این عملکرد چه کاری
212
00:10:08,720 –> 00:10:10,970
انجام می دهد که تصویر را برای مقدار مشخصی از میلی ثانیه نمایش می دهد،
213
00:10:10,970 –> 00:10:13,640
214
00:10:13,640 –> 00:10:16,490
زمان 0 را تعیین
215
00:10:16,490 –> 00:10:19,070
می کنیم. نتیجه ما به طور
216
00:10:19,070 –> 00:10:21,470
بی نهایت پنجره می شود تا زمانی که
217
00:10:21,470 –> 00:10:24,440
هر چیزی را در صفحه کلید خود فشار دهیم، اگر
218
00:10:24,440 –> 00:10:28,700
کد python Lanes را دوباره اجرا کنیم، تصویر نمایش داده می شود
219
00:10:28,700 –> 00:10:31,820
و متوجه می شویم که نتایج نام پنجره ما
220
00:10:31,820 –> 00:10:33,770
این درس را کوتاه نگه می دارد و در اینجا متوقف می شود شما
221
00:10:33,770 –> 00:10:35,390
یاد می گیرید که چگونه تصاویر را
222
00:10:35,390 –> 00:10:37,880
با استفاده از کتابخانه opencv بارگیری و نمایش دهید. در
223
00:10:37,880 –> 00:10:39,770
درس بعدی شروع به بحث در مورد
224
00:10:39,770 –> 00:10:42,290
تشخیص لبهها میکنیم، تکنیکی که از آن برای
225
00:10:42,290 –> 00:10:44,930
نوشتن برنامهای استفاده میکنیم که میتواند لبهها را در
226
00:10:44,930 –> 00:10:45,690
یک تصویر تشخیص دهد
227
00:10:45,690 –> 00:10:48,829
و در نتیجه خطوط خطوط را
228
00:10:48,829 –> 00:10:51,510
که به درس شماره دو خوش آمدید را مشخص کنیم،
229
00:10:51,510 –> 00:10:53,490
هدف چند ویدیوی بعدی این خواهد بود. برای استفاده
230
00:10:53,490 –> 00:10:56,160
از الگوریتم
231
00:10:56,160 –> 00:10:58,589
تشخیص لبه، تکنیک تشخیص لبه، هدف از
232
00:10:58,589 –> 00:11:00,209
تشخیص لبه، شناسایی
233
00:11:00,209 –> 00:11:02,519
مرزهای اشیاء درون تصاویر است که در
234
00:11:02,519 –> 00:11:05,160
اصل استفاده از تشخیص لبه برای
235
00:11:05,160 –> 00:11:07,199
سعی کنید مناطقی را در یک تصویر بیابید که
236
00:11:07,199 –> 00:11:09,089
در آن تغییر شدیدی در شدت وجود دارد،
237
00:11:09,089 –> 00:11:12,300
تغییر شدید رنگ قبل از فرو رفتن در
238
00:11:12,300 –> 00:11:14,279
این مورد، مهم است بدانید که یک
239
00:11:14,279 –> 00:11:16,860
تصویر را می توان به عنوان یک ماتریس خواند، آرایه ای
240
00:11:16,860 –> 00:11:19,769
از پیکسل ها که یک پیکسل حاوی
241
00:11:19,769 –> 00:11:21,930
شدت نور در یک مکان است. در تصویر،
242
00:11:21,930 –> 00:11:24,779
شدت هر پیکسل با یک
243
00:11:24,779 –> 00:11:27,990
مقدار عددی که از 0 تا 255
244
00:11:27,990 –> 00:11:31,260
متغیر است نشان داده شده است، مقدار شدت 0 اگر چیزی کاملاً سیاه باشد، شدت 0 را نشان می دهد
245
00:11:31,260 –> 00:11:33,660
246
00:11:33,660 –> 00:11:37,290
در حالی که 255 نشان دهنده حداکثر
247
00:11:37,290 –> 00:11:39,630
شدت چیزی است که کاملاً
248
00:11:39,630 –> 00:11:43,199
سفید است که گفته می شود گرادیان،
249
00:11:43,199 –> 00:11:45,449
تغییر در روشنایی بیش از آن است. مجموعه ای از
250
00:11:45,449 –> 00:11:48,720
پیکسل ها یک گرادیان قوی نشان دهنده یک
251
00:11:48,720 –> 00:11:51,709
تغییر تند است در حالی که یک گرادیان کوچک
252
00:11:51,709 –> 00:11:55,550
نشان دهنده یک تغییر کم عمق
253
00:11:56,300 –> 00:11:58,550
در سمت راست است که شما
254
00:11:58,550 –> 00:12:00,470
به شیب توپ فوتبال نگاه می کنید،
255
00:12:00,470 –> 00:12:03,350
طرح کلی پیکسل های سفید مربوط
256
00:12:03,350 –> 00:12:05,510
به ناپیوستگی و روشنایی در
257
00:12:05,510 –> 00:12:08,360
نقاط است. عنصر قدرت این
258
00:12:08,360 –> 00:12:10,790
به ما کمک می کند لبه ها را در تصویر خود شناسایی کنیم
259
00:12:10,790 –> 00:12:13,220
زیرا یک لبه با
260
00:12:13,220 –> 00:12:15,320
تفاوت مقادیر شدت تعریف می شود. n
261
00:12:15,320 –> 00:12:17,959
پیکسل مجاور و هر جا که
262
00:12:17,959 –> 00:12:20,330
تغییر شدید در شدت وجود داشته باشد، تغییر سریع
263
00:12:20,330 –> 00:12:22,850
در روشنایی هر جا که یک
264
00:12:22,850 –> 00:12:26,000
گرادیان قوی وجود دارد، یک پیکسل روشن متناظر در تصویر گرادیان وجود دارد،
265
00:12:26,000 –> 00:12:29,390
با
266
00:12:29,390 –> 00:12:31,310
ردیابی همه این پیکسل ها،
267
00:12:31,310 –> 00:12:34,399
لبه هایی را به دست می آوریم که می خواهیم از این شهود استفاده کنیم.
268
00:12:34,399 –> 00:12:36,430
برای تشخیص لبهها در تصویر بیرون ما،
269
00:12:36,430 –> 00:12:40,160
این یک فرآیند چند مرحلهای است، مرحله
270
00:12:40,160 –> 00:12:42,760
اول، تبدیل تصویر به مقیاس خاکستری،
271
00:12:42,760 –> 00:12:46,730
چرا آن را به مقیاس خاکستری تبدیل میکنیم، همانطور که در
272
00:12:46,730 –> 00:12:48,890
مورد تصاویر قبلی توضیح دادیم که از
273
00:12:48,890 –> 00:12:52,640
پیکسلهایی تشکیل شدهاند، یک تصویر رنگی سه کاناله
274
00:12:52,640 –> 00:12:55,399
دارای سبز قرمز است. و هر
275
00:12:55,399 –> 00:12:57,860
پیکسل را به صورت ترکیبی از سه
276
00:12:57,860 –> 00:13:00,620
مقدار شدت کانال های آبی ایجاد می کند، در حالی که یک تصویر در مقیاس خاکستری تنها
277
00:13:00,620 –> 00:13:03,740
دارای یک کانال در هر پیکسل با تنها یک
278
00:13:03,740 –> 00:13:07,070
مقدار شدت است که از 0 تا 255 متغیر است.
279
00:13:07,070 –> 00:13:10,910
280
00:13:10,910 –> 00:13:14,029
281
00:13:14,029 –> 00:13:16,250
282
00:13:16,250 –> 00:13:18,950
تصویر رنگی و فشرده محاسباتی کمتر،
283
00:13:18,950 –> 00:13:22,070
بیایید پیاده سازی این را
284
00:13:22,070 –> 00:13:24,560
در داخل آدم شروع کنیم، ما قبلاً
285
00:13:24,560 –> 00:13:27,170
تصویر خود را با رنگ قرمز در یک آرایه بارگذاری کرده
286
00:13:27,170 –> 00:13:33,700
ایم. این کار این است که numpy را به عنوان نام مستعار NP وارد
287
00:13:33,700 –> 00:13:36,370
کنیم که ما قصد داریم با یک کپی از این
288
00:13:36,370 –> 00:13:40,840
آرایه کار کنیم، با تنظیم تصویر خط برابر با
289
00:13:40,840 –> 00:13:46,720
تصویر کپی numpy، بنابراین آرایه ما
290
00:13:46,720 –> 00:13:49,360
را در یک متغیر جدید کپی می کنیم، ضروری است
291
00:13:49,360 –> 00:13:52,180
که در واقع یک کپی از آن ایجاد کنید. این آرایه
292
00:13:52,180 –> 00:13:54,700
به جای تنظیم تصویر Lane
293
00:13:54,700 –> 00:13:58,420
برابر با تصویر است اگر این کار را انجام دهیم هر تغییری
294
00:13:58,420 –> 00:14:01,210
که در تصویر Lane ایجاد می کنیم
295
00:14:01,210 –> 00:14:03,960
در آرایه اصلی تغییرپذیر نیز منعکس
296
00:14:03,960 –> 00:14:06,640
می شود همیشه اطمینان حاصل کنید که
297
00:14:06,640 –> 00:14:08,980
هر زمان که با یک مسابقه کار می کنید به جای اینکه
298
00:14:08,980 –> 00:14:13,030
فقط آنها را برابر قرار دهید یک کپی تهیه کنید. به طور مستقیم، بنابراین کاری
299
00:14:13,030 –> 00:14:15,010
که اکنون انجام خواهیم داد این است که از تصویر رنگی یک مقیاس خاکستری ایجاد
300
00:14:15,010 –> 00:14:17,920
می کنیم که با
301
00:14:17,920 –> 00:14:21,910
تنظیم یک متغیر خاکستری برابر با cv
302
00:14:21,910 –> 00:14:25,720
به و از کتابخانه OpenCV ما
303
00:14:25,720 –> 00:14:30,100
تابع رنگ CVT را فراخوانی می کند که یک
304
00:14:30,100 –> 00:14:32,490
تصویر را از یک رنگ تبدیل می کند. فضا را به دیگری
305
00:14:32,490 –> 00:14:36,730
تبدیل می کنیم تصویر Lane و در
306
00:14:36,730 –> 00:14:40,660
آرگومان دوم برای تبدیل RGB به مقیاس
307
00:14:40,660 –> 00:14:44,280
خاکستری می توانیم از پرچم
308
00:14:44,280 –> 00:14:51,840
C v2 نقطه زیر خط RGB به خاکستری
309
00:14:51,840 –> 00:14:55,870
استفاده کنیم و اکنون به جای
310
00:14:55,870 –> 00:14:59,320
نشان دادن تصویر رنگی، خاکستری ها را نشان خواهیم داد.
311
00:14:59,320 –> 00:15:04,920
تصویر cale اگر به خطوط پایانه پایتون خود برویم
312
00:15:04,920 –> 00:15:09,370
که py همه چیز
313
00:15:09,370 –> 00:15:12,160
بر اساس آن کار می کند، این مرحله شماره یک
314
00:15:12,160 –> 00:15:14,980
مرحله شماره دو برای تشخیص لبه
315
00:15:14,980 –> 00:15:17,860
بود، سپس یک تاری گاوسی روی این تصویر اعمال می شود،
316
00:15:17,860 –> 00:15:20,380
اجازه دهید در ویدیوی بعدی در مورد آن صحبت کنیم
317
00:15:20,380 –> 00:15:22,620
318
00:15:22,750 –> 00:15:24,490
به شماره درس خوش آمدید. سه در
319
00:15:24,490 –> 00:15:26,589
آخرین درس، مرحله شماره یک را اعمال کردیم
320
00:15:26,589 –> 00:15:28,480
که تبدیل تصویر ما به
321
00:15:28,480 –> 00:15:30,910
مقیاس خاکستری مرحله دو بود، این است که اکنون
322
00:15:30,910 –> 00:15:34,000
هنگام تشخیص لبهها، نویز را کاهش دهیم و تصویر خود را صاف کنیم،
323
00:15:34,000 –> 00:15:36,040
در حالی که مهم است تا
324
00:15:36,040 –> 00:15:38,170
325
00:15:38,170 –> 00:15:39,310
آنجا که ممکن است لبههای تصویر را به دقت
326
00:15:39,310 –> 00:15:42,490
بگیریم و باید فیلتر کنیم. حذف هر گونه نویز تصویر، نویز تصویر
327
00:15:42,490 –> 00:15:44,649
می تواند لبه های کاذب ایجاد کند و
328
00:15:44,649 –> 00:15:47,620
در نهایت بر روی تشخیص لبه تأثیر بگذارد، به
329
00:15:47,620 –> 00:15:49,839
همین دلیل ضروری است که آن را فیلتر کنید و
330
00:15:49,839 –> 00:15:53,319
در نتیجه صاف کردن تصویر، فیلتر کردن
331
00:15:53,319 –> 00:15:55,569
نویز تصویر و صاف
332
00:15:55,569 –> 00:15:58,569
کردن با فیلتر گاوسی برای درک
333
00:15:58,569 –> 00:16:01,509
مفهوم فراخوان فیلتر گاوسی انجام می شود. که
334
00:16:01,509 –> 00:16:03,639
یک تصویر به عنوان مجموعه ای از پیکسل های محرمانه ذخیره می شود،
335
00:16:03,639 –> 00:16:07,120
هر یک از پیکسل ها برای یک
336
00:16:07,120 –> 00:16:09,279
تصویر در مقیاس خاکستری با یک
337
00:16:09,279 –> 00:16:11,620
عدد منفرد نشان داده می شود که توصیف می کند. به عنوان مثال،
338
00:16:11,620 –> 00:16:14,259
روشنایی پیکسل را به
339
00:16:14,259 –> 00:16:16,509
عنوان مثال چگونه میتوانیم تصویر زیر را صاف کنیم،
340
00:16:16,509 –> 00:16:19,180
پاسخ معمولی این است
341
00:16:19,180 –> 00:16:21,189
که مقدار یک پیکسل را با
342
00:16:21,189 –> 00:16:23,589
میانگین شدت پیکسلهای
343
00:16:23,589 –> 00:16:26,189
اطراف آن تغییر دهیم و
344
00:16:26,330 –> 00:16:28,800
میانگین پیکسلهای موجود در تصویر را
345
00:16:28,800 –> 00:16:31,460
کاهش دهیم تا نویز کاهش یابد.
346
00:16:31,460 –> 00:16:33,780
اساساً این هسته از
347
00:16:33,780 –> 00:16:35,970
اعداد توزیع شده معمولی در کل تصویر ما اجرا می شود
348
00:16:35,970 –> 00:16:39,390
و هر پیکسل را
349
00:16:39,390 –> 00:16:41,460
برابر با میانگین وزنی
350
00:16:41,460 –> 00:16:42,660
پیکسل های همسایه خود قرار می دهد،
351
00:16:42,660 –> 00:16:46,110
بنابراین تصویر ما را صاف می کند، ما
352
00:16:46,110 –> 00:16:48,450
قصد نداریم به پیچیدگی هسته و
353
00:16:48,450 –> 00:16:50,580
چگونگی آن بپردازیم. فقط نمی داند که
354
00:16:50,580 –> 00:16:52,200
وقتی این خط کد را در داخل ویرایشگر خود می نویسیم
355
00:16:52,200 –> 00:16:55,530
blur برابر با cv است –
356
00:16:55,530 –> 00:16:58,170
تاری گاوسی کاری که انجام می دهیم اعمال یک
357
00:16:58,170 –> 00:17:01,140
تاری گاوسی روی یک تصویر خاکستری با
358
00:17:01,140 –> 00:17:04,470
یک هسته 5×5 است که اندازه هسته
359
00:17:04,470 –> 00:17:08,099
بستگی دارد. در موقعیتهای خاص،
360
00:17:08,099 –> 00:17:11,130
یک هسته 5×5 برای اکثر موارد اندازه خوبی است، اما
361
00:17:11,130 –> 00:17:13,349
در نهایت کاری که انجام میدهد این است که یک
362
00:17:13,349 –> 00:17:16,190
تصویر جدید را که ما به سادگی آن را تاری مینامیم،
363
00:17:16,190 –> 00:17:18,960
با اعمال تاری گاوسی با در همپیچیدن
364
00:17:18,960 –> 00:17:21,150
i ما، برگرداند. mage با هسته ای از
365
00:17:21,150 –> 00:17:25,170
مقادیر گاوسی نویز را در تصویر ما کاهش می دهد بازگشت
366
00:17:25,170 –> 00:17:29,570
به مجموعه پروژه ما blur برابر با cv است –
367
00:17:29,570 –> 00:17:34,020
تاری گاوسی ما این تاری را در
368
00:17:34,020 –> 00:17:38,610
تصویر مقیاس خاکستری خود با هسته 5×5 خود اعمال می
369
00:17:38,610 –> 00:17:40,740
کنیم و فقط انحراف را
370
00:17:40,740 –> 00:17:43,200
صفر می کنیم. نکته اصلی که باید
371
00:17:43,200 –> 00:17:44,850
از این موضوع حذف کنید این است که ما از
372
00:17:44,850 –> 00:17:48,060
تاری گاوسی برای کاهش نویز در تصویر مقیاس خاکستری خود استفاده می کنیم
373
00:17:48,060 –> 00:17:50,220
و اکنون به سادگی تصویر تار را نشان می
374
00:17:50,220 –> 00:17:54,540
دهیم اگر این کد را اجرا کنیم
375
00:17:54,540 –> 00:17:58,940
خطوط پایتون نقطه py، بعداً تصویر تار در مقیاس خاکستری ما وجود خواهد داشت.
376
00:17:58,940 –> 00:18:02,610
در مورد زمانی که
377
00:18:02,610 –> 00:18:05,460
روش canny را اعمال می کنیم، باید توجه داشت که
378
00:18:05,460 –> 00:18:09,390
این مرحله در واقع اختیاری بود، زیرا
379
00:18:09,390 –> 00:18:10,890
تابع canny به صورت
380
00:18:10,890 –> 00:18:14,340
داخلی یک گاوسی 5×5 را اعمال می کند، زمانی که
381
00:18:14,340 –> 00:18:17,400
آن را a می نامیم، بدون توجه به اینکه اکنون می دانیم که
382
00:18:17,400 –> 00:18:19,770
نظریه ای را که مقیاس خاکستری خود را به دست آورده ایم،
383
00:18:19,770 –> 00:18:21,720
صاف می کنیم و آن را نویز معرفی شده با
384
00:18:21,720 –> 00:18:24,450
تاری گاوسی اکنون زمان اعمال
385
00:18:24,450 –> 00:18:27,030
تابع canny است، این کار را در ویدیوی بعدی
386
00:18:27,030 –> 00:18:29,400
در درس آخر انجام می دهیم، تصویر خود را صاف می کنیم
387
00:18:29,400 –> 00:18:32,130
و نویز را کاهش می دهیم، اکنون زمان
388
00:18:32,130 –> 00:18:34,770
اعمال روش canny برای شناسایی لبه ها
389
00:18:34,770 –> 00:18:37,130
در im است. به یاد بیاورید که یک لبه
390
00:18:37,130 –> 00:18:39,550
مربوط به ناحیه ای است
391
00:18:39,550 –> 00:18:40,930
که در آن
392
00:18:40,930 –> 00:18:43,180
یک تغییر شدید در شدت یا تغییر رنگ شدید
393
00:18:43,180 –> 00:18:46,630
بین پیکسل های مجاور در تصویر وجود دارد.
394
00:18:46,630 –> 00:18:48,460
395
00:18:48,460 –> 00:18:51,100
396
00:18:51,100 –> 00:18:52,840
تغییر
397
00:18:52,840 –> 00:18:55,240
در حالی که یک گرادیان کوچک، یک تغییر کم عمق،
398
00:18:55,240 –> 00:18:58,030
ابتدا ثابت کردیم که یک
399
00:18:58,030 –> 00:19:00,730
تصویر از آنجا که از پیکسل ها تشکیل شده است،
400
00:19:00,730 –> 00:19:03,160
بنابراین می توان به عنوان یک ماتریس، آرایه ای
401
00:19:03,160 –> 00:19:05,530
از شدت پیکسل ها برای محاسبه
402
00:19:05,530 –> 00:19:07,870
گرادیان ها در یک تصویر خواند، باید تشخیص
403
00:19:07,870 –> 00:19:10,870
داد که می توانیم یک تصویر را نیز در یک تصویر نشان دهیم.
404
00:19:10,870 –> 00:19:13,680
فضای مختصات دو بعدی x و y
405
00:19:13,680 –> 00:19:16,900
محور x عرض تصاویر را طی می کند
406
00:19:16,900 –> 00:19:19,660
و محور y در امتداد ارتفاعات تصویر می رود
407
00:19:19,660 –> 00:19:22,480
و تعداد
408
00:19:22,480 –> 00:19:24,940
ستون ها در تصویر و ارتفاع
409
00:19:24,940 –> 00:19:27,820
تعداد ردیف ها را نشان می دهد به طوری که
410
00:19:27,820 –> 00:19:29,920
حاصلضرب عرض و ارتفاع هر دو را به شما می دهد.
411
00:19:29,920 –> 00:19:31,690
تعداد کل پیکسل های تصویر شما
412
00:19:31,690 –> 00:19:34,150
نه تنها می توانیم به
413
00:19:34,150 –> 00:19:36,160
تصویر خود به عنوان یک آرایه نگاه کنیم، بلکه می توانیم به عنوان یک
414
00:19:36,160 –> 00:19:39,640
تابع پیوسته از x و y نیز نگاه کنیم زیرا
415
00:19:39,640 –> 00:19:41,950
این یک ریاضی است. تابع l ما میتوانیم
416
00:19:41,950 –> 00:19:44,770
عملیات ریاضی را انجام دهیم که
417
00:19:44,770 –> 00:19:47,830
این سوال را ایجاد میکند که از چه عملگر
418
00:19:47,830 –> 00:19:49,990
میتوانیم برای تعیین تغییرات سریع در
419
00:19:49,990 –> 00:19:53,050
روشنایی در تصویر خود استفاده کنیم.
420
00:19:53,050 –> 00:19:55,180
421
00:19:55,180 –> 00:19:58,900
422
00:19:58,900 –> 00:20:01,810
423
00:20:01,810 –> 00:20:03,940
تغییر در شدت نسبت به
424
00:20:03,940 –> 00:20:07,270
پیکسل های مجاور یک مشتق کوچک یک
425
00:20:07,270 –> 00:20:10,210
تغییر کوچک در شدت است در حالی که
426
00:20:10,210 –> 00:20:13,390
یک مشتق بزرگ یک تغییر بزرگ با
427
00:20:13,390 –> 00:20:15,190
محاسبه مشتق در تمام جهات
428
00:20:15,190 –> 00:20:17,770
تصویر است که ما شیب ها را محاسبه می کنیم
429
00:20:17,770 –> 00:20:21,370
زیرا یادآوری گرادیان تغییر
430
00:20:21,370 –> 00:20:24,340
در آن است. روشنایی بیش از یک سری از پیکسلها، بنابراین
431
00:20:24,340 –> 00:20:26,770
وقتی تابع canny را صدا میزنیم،
432
00:20:26,770 –> 00:20:29,530
همه این کارها را برای ما انجام میدهد،
433
00:20:29,530 –> 00:20:31,450
گرادیان را در تمام جهات
434
00:20:31,450 –> 00:20:34,150
تصویر تار ما محاسبه میکند و سپس
435
00:20:34,150 –> 00:20:37,120
قویترین گرادیانهای ما را بهعنوان یک سری
436
00:20:37,120 –> 00:20:40,570
پیکسل سفید دنبال میکند، اما به این دو توجه کنید.
437
00:20:40,570 –> 00:20:42,910
آرگومان های آستانه پایین و آستانه بالا
438
00:20:42,910 –> 00:20:45,610
در حالی که این در واقع به ما اجازه می دهد
439
00:20:45,610 –> 00:20:48,310
پیکسل های مجاور را که
440
00:20:48,310 –> 00:20:51,610
از قوی ترین شیب ها پیروی می کنند، جدا
441
00:20:51,610 –> 00:20:52,990
کنیم.
442
00:20:52,990 –> 00:20:55,360
آستانه بالایی بزرگ باشد، سپس به
443
00:20:55,360 –> 00:20:57,460
عنوان یک پیکسل لبه پذیرفته می شود، اگر زیر
444
00:20:57,460 –> 00:21:00,580
آستانه پایین باشد، اگر گرادیان بین آستانه ها باشد، رد می
445
00:21:00,580 –> 00:21:03,279
شود، سپس
446
00:21:03,279 –> 00:21:05,110
تنها در صورتی پذیرفته می شود
447
00:21:05,110 –> 00:21:07,899
که به یک لبه قوی متصل باشد که
448
00:21:07,899 –> 00:21:10,179
خود مستندات استفاده را توصیه می کند.
449
00:21:10,179 –> 00:21:13,240
نسبت یک به دو یا یک به سه به
450
00:21:13,240 –> 00:21:16,720
این ترتیب از نسبت آستانه بالا پایین
451
00:21:16,720 –> 00:21:20,289
یک به سه استفاده می کند پنجاه به یک پنجاه حالا
452
00:21:20,289 –> 00:21:21,820
که می دانیم در زیر هود چه می گذرد،
453
00:21:21,820 –> 00:21:24,100
می توانیم این تابع را در داخل
454
00:21:24,100 –> 00:21:29,620
پروژه خود با نوشتن Kenny بخوانیم. برابر با cv
455
00:21:29,620 –> 00:21:34,720
به DA کنی روش canny را
456
00:21:34,720 –> 00:21:38,289
روی تصویر تار شده با
457
00:21:38,289 –> 00:21:42,250
آستانه های کم و بالای 50 و 150 اعمال می کند و حالا اگر جلو برویم و کد python lanes dot را اجرا
458
00:21:42,250 –> 00:21:45,460
کنیم، به جای تصویر تار، شیب تصویر را نشان خواهیم داد.
459
00:21:45,460 –> 00:21:49,330
460
00:21:49,330 –> 00:21:54,460
py و
461
00:21:54,460 –> 00:21:58,470
یک تصویر گرادیان وجود دارد که به وضوح
462
00:21:58,470 –> 00:22:01,630
طرحی از لبهها را ترسیم میکند که
463
00:22:01,630 –> 00:22:04,990
مطابق با واضحترین تغییرات در
464
00:22:04,990 –> 00:22:07,929
شدت گرادیانهایی هستند که از آستانه بالا فراتر میروند،
465
00:22:07,929 –> 00:22:11,520
به صورت پیکسلهای روشن که
466
00:22:11,520 –> 00:22:13,929
پیکسلهای مجاور را در i شناسایی میکنند، ردیابی میشوند. mage
467
00:22:13,929 –> 00:22:16,570
با سریع ترین تغییرات در
468
00:22:16,570 –> 00:22:19,450
روشنایی تغییرات کوچک و
469
00:22:19,450 –> 00:22:21,460
روشنایی اصلاً ردیابی نمی شوند و بر
470
00:22:21,460 –> 00:22:23,799
این اساس سیاه هستند زیرا به زیر
471
00:22:23,799 –> 00:22:26,590
آستانه پایین تر می آیند، این برای روش شیرینی
472
00:22:26,590 –> 00:22:28,630
است که ما از آن برای ترسیم
473
00:22:28,630 –> 00:22:30,909
قوی ترین گرادیان ها در تصویر خود استفاده
474
00:22:30,909 –> 00:22:33,490
کردیم. توضیحات زیادی برای تنها
475
00:22:33,490 –> 00:22:35,950
سه خط کد ارائه شده است، اما خوب است
476
00:22:35,950 –> 00:22:37,960
477
00:22:37,960 –> 00:22:39,929
قبل از اینکه ادامه دهیم، درک درستی از آنچه در زیر کاپوت میگذرد داشته باشیم
478
00:22:39,929 –> 00:22:42,100
و اکنون که
479
00:22:42,100 –> 00:22:44,049
قویترین گرادیانها را در چند
480
00:22:44,049 –> 00:22:46,210
ویدیوی بعدی محاسبه کردهایم، تبدیل Hough را اعمال خواهیم کرد.
481
00:22:46,210 –> 00:22:49,929
روشی برای تشخیص خطوط خود در آخرین
482
00:22:49,929 –> 00:22:51,850
درس ما از تابع candy برای
483
00:22:51,850 –> 00:22:53,470
ترسیم قوی ترین شیب ها در
484
00:22:53,470 –> 00:22:55,600
تصویر خود استفاده کردیم، اکنون بر روی چگونگی
485
00:22:55,600 –> 00:22:58,029
شناسایی خطوط خطوط در تصویر تمرکز می کنیم قبل از
486
00:22:58,029 –> 00:22:59,830
انجام این کار، کاری که اکنون انجام می دهیم این است که
487
00:22:59,830 –> 00:23:01,840
یک منطقه را مشخص کنیم. علاقهمند به تصویری که
488
00:23:01,840 –> 00:23:04,029
میخواهیم از آن استفاده کنیم تا
489
00:23:04,029 –> 00:23:07,539
تلفن ثابت خود را که در حال حاضر از شووین پرسیده شده است، قبل
490
00:23:07,539 –> 00:23:08,889
از ادامه کار استفاده کنیم.
491
00:23:08,889 –> 00:23:11,259
492
00:23:11,259 –> 00:23:13,830
یون
493
00:23:13,830 –> 00:23:14,950
کنی
494
00:23:14,950 –> 00:23:18,700
که یک تصویر می گیرد و کاری که ما
495
00:23:18,700 –> 00:23:21,700
انجام می دهیم این است که کد الگوریتم کنی را
496
00:23:21,700 –> 00:23:24,989
در داخل تابع کپی کرده
497
00:23:29,650 –> 00:23:32,740
و Kenny را به عنوان مقدار بازگشتی مشخص کنیم
498
00:23:32,740 –> 00:23:36,310
Kenny و کاری که اکنون می توانیم انجام دهیم این است که
499
00:23:36,310 –> 00:23:37,180
به سادگی
500
00:23:37,180 –> 00:23:39,760
Kenny را برابر با مقدار برگشتی شیرینی خود قرار دهیم.
501
00:23:39,760 –> 00:23:43,000
عملکردی که در
502
00:23:43,000 –> 00:23:46,540
تصویر رنگی RGB اولیه منتقل می شود و دوباره این کد
503
00:23:46,540 –> 00:23:49,630
را در ترمینال پایتون خود اجرا می کنیم، منجر به این می شود که
504
00:23:49,630 –> 00:23:53,470
همه چیز هنوز دست نخورده است، کاری که
505
00:23:53,470 –> 00:23:55,990
اکنون انجام می دهیم این است که
506
00:23:55,990 –> 00:23:58,750
قبل از انجام این کار، به
507
00:23:58,750 –> 00:24:00,160
جای نشان دادن تصویر خود، این ناحیه را به عنوان منطقه مورد علاقه خود مشخص می کنیم. گرادیان
508
00:24:00,160 –> 00:24:01,830
با OpenCV از کتابخانه matplotlib
509
00:24:01,830 –> 00:24:04,480
استفاده می کند تا بهتر روشن شود که چگونه
510
00:24:04,480 –> 00:24:06,820
این منطقه را ایزوله می کنیم، شما
511
00:24:06,820 –> 00:24:08,320
باید قبلاً matplotlib را با
512
00:24:08,320 –> 00:24:09,520
حسن نیت توزیع ضد شمارنده نصب کرده باشید،
513
00:24:09,520 –> 00:24:12,090
بنابراین کاری که اکنون می توانیم انجام دهیم
514
00:24:12,090 –> 00:24:17,320
واردات matplotlib است و ما به
515
00:24:17,320 –> 00:24:19,420
زیر نیاز داریم. بسته ای از matplotlib
516
00:24:19,420 –> 00:24:22,990
به نام نمودار pi به عنوان نام مستعار
517
00:24:22,990 –> 00:24:28,420
PLT به راحتی نمودار pi حاوی
518
00:24:28,420 –> 00:24:31,720
تابع m show است، بنابراین ما می توانیم فقط
519
00:24:31,720 –> 00:24:37,870
cv را به وب PLT جایگزین کنیم و در این مورد نیازی
520
00:24:37,870 –> 00:24:40,450
به تعیین نام پنجره نیست.
521
00:24:40,450 –> 00:24:42,940
تصویر معادل تابع کلید انتظار open Stevie
522
00:24:42,940 –> 00:24:47,770
به سادگی PLT خواهد بود، بنابراین اگر
523
00:24:47,770 –> 00:24:49,510
به عقب برگردیم و کد را در
524
00:24:49,510 –> 00:24:52,840
خطوط پایانه پایتون py اجرا کنیم،
525
00:24:52,840 –> 00:24:55,510
همان تصویر را به همراه محور x و y دریافت می کنیم،
526
00:24:55,510 –> 00:24:57,880
توجه کنید که چگونه محور y از ردیف اول شروع می شود.
527
00:24:57,880 –> 00:24:59,890
از پیکسلها و سپس
528
00:24:59,890 –> 00:25:03,550
با محورهای خود به سمت پایین میرود، میخواهیم
529
00:25:03,550 –> 00:25:05,350
وسعت میدان دید خود را
530
00:25:05,350 –> 00:25:07,960
بر اساس منطقه مورد نظر آنها محدود کنیم و
531
00:25:07,960 –> 00:25:10,240
چالتن عمدتاً مثلثی را ترسیم میکند که
532
00:25:10,240 –> 00:25:14,830
در آن رئوس 200 پیکسل در امتداد X و 700
533
00:25:14,830 –> 00:25:17,500
پیکسل در امتداد Y است که به
534
00:25:17,500 –> 00:25:20,410
سادگی پایین تصویر 1100 پیکسل
535
00:25:20,410 –> 00:25:22,690
در امتداد X باشید و بار دیگر
536
00:25:22,690 –> 00:25:25,060
پایین تصویر 700 پیکسل از Y در
537
00:25:25,060 –> 00:25:27,340
پایین ترین نقطه و آخرین راس به
538
00:25:27,340 –> 00:25:31,660
سادگی 550 پیکسل در امتداد X و 250 پیکسل خواهد بود که
539
00:25:31,660 –> 00:25:34,450
به سمت پایین Y حرکت می کند و در نهایت
540
00:25:34,450 –> 00:25:36,670
یک مثلث را ترسیم می کند. که منطقه ای را
541
00:25:36,670 –> 00:25:38,280
که می خواهیم خطوط خط را شناسایی کنیم، جدا می کند،
542
00:25:38,280 –> 00:25:40,270
بنابراین هدف این ویدیو
543
00:25:40,270 –> 00:25:42,220
ایجاد تصویری کاملا سیاه و سفید
544
00:25:42,220 –> 00:25:43,450
545
00:25:43,450 –> 00:25:46,210
با همان ابعاد تصویر جاده ما خواهد بود
546
00:25:46,210 –> 00:25:49,030
و بخشی از منطقه آن را با یک
547
00:25:49,030 –> 00:25:52,450
p مثلثی پر می کند. اولیگون اول و مهمتر از همه
548
00:25:52,450 –> 00:25:54,370
، نشان دادن تصویر را به
549
00:25:54,370 –> 00:25:58,320
شماره opencv به جای matplotlib برمیگرداند
550
00:25:58,570 –> 00:26:00,789
و کاری که اکنون انجام میدهیم این است که تابعی را تعریف کنیم که
551
00:26:00,789 –> 00:26:06,340
یک منطقه مورد علاقه را تعیین میکند که
552
00:26:06,340 –> 00:26:09,220
همچنین یک تصویر را میگیرد و این که این
553
00:26:09,220 –> 00:26:10,330
تابع چه کاری انجام میدهد کاملاً واضح است.
554
00:26:10,330 –> 00:26:12,820
555
00:26:12,820 –> 00:26:15,639
ناحیه محصور میدان دید ما را برمیگرداند و
556
00:26:15,639 –> 00:26:18,850
به یاد میآورد که ناحیه محصور
557
00:26:18,850 –> 00:26:21,399
مثلثی شکل بود، بنابراین
558
00:26:21,399 –> 00:26:24,399
متغیری به نام مثلثی که برابر با آن است تنظیم میکنیم
559
00:26:24,399 –> 00:26:27,700
و این چند ضلعی این مثلث را
560
00:26:27,700 –> 00:26:32,860
به عنوان یک آرایه numpy و آرایه نقطه P اعلام میکنیم.
561
00:26:32,860 –> 00:26:34,540
در داخل این آرایه جایی است که شما
562
00:26:34,540 –> 00:26:36,640
رئوس آن را مشخص می کنید، به یاد بیاورید که در حالی
563
00:26:36,640 –> 00:26:38,440
که وسعت میدان دید خود را محدود می
564
00:26:38,440 –> 00:26:41,290
کنیم، مثلثی را با
565
00:26:41,290 –> 00:26:45,130
رئوس 200 در امتداد X و به صورت عمودی
566
00:26:45,130 –> 00:26:47,260
تا وسعت تصویر ما تا پایین
567
00:26:47,260 –> 00:26:49,809
که در این مورد برابر است، ترسیم کردیم. ارتفاع ما می
568
00:26:49,809 –> 00:26:51,460
توانیم ارتفاع تصویر خود را با تنظیم
569
00:26:51,460 –> 00:26:55,120
ارتفاع برابر با شکل نقطه تصویر
570
00:26:55,120 –> 00:26:56,230
در پایان
571
00:26:56,230 –> 00:26:58,480
بدست آوریم.
572
00:26:58,480 –> 00:27:00,520
573
00:27:00,520 –> 00:27:02,380
e ما
574
00:27:02,380 –> 00:27:04,299
با یک آرایه دو بعدی سر و کار داریم که اولین
575
00:27:04,299 –> 00:27:06,250
عدد صحیح مربوط به تعداد
576
00:27:06,250 –> 00:27:09,100
ردیف هایی است که محور y تصاویر را طی می کند
577
00:27:09,100 –> 00:27:11,440
ارتفاع و ارتفاع بر این اساس
578
00:27:11,440 –> 00:27:13,870
تعداد ردیف ها است، بنابراین می توانید فرض کنید
579
00:27:13,870 –> 00:27:15,790
که این مقدار چیزی بسیار
580
00:27:15,790 –> 00:27:18,400
نزدیک به آن است. 700 زیرا این همان چیزی است که در matplotlib دیدیم،
581
00:27:18,400 –> 00:27:20,410
بنابراین ما به سادگی ارتفاع را طوری تنظیم می
582
00:27:20,410 –> 00:27:22,960
کنیم که راس اول خود را کامل کند.
583
00:27:22,960 –> 00:27:25,929
584
00:27:25,929 –> 00:27:28,690
585
00:27:28,690 –> 00:27:31,540
586
00:27:31,540 –> 00:27:33,970
587
00:27:33,970 –> 00:27:38,040
در آخرین راس
588
00:27:38,040 –> 00:27:43,090
550 پیکسل در امتداد X و 250 پیکسل
589
00:27:43,090 –> 00:27:46,179
در امتداد Y این چند ضلعی بود، ما
590
00:27:46,179 –> 00:27:49,720
آن را روی یک ماسک سیاه با
591
00:27:49,720 –> 00:27:52,660
ابعاد مشابه تصویر جاده خود اعمال می کنیم، بنابراین
592
00:27:52,660 –> 00:27:57,120
ماسک را برابر با num pi dot صفر قرار می دهیم.
593
00:27:57,120 –> 00:28:03,549
مانند تصویر به یاد بیاورید که یک تصویر را می توان
594
00:28:03,549 –> 00:28:05,620
به عنوان یک آرایه از پیکسل ها خواند.
595
00:28:05,620 –> 00:28:08,020
596
00:28:08,020 –> 00:28:10,419
597
00:28:10,419 –> 00:28:13,150
598
00:28:13,150 –> 00:28:15,790
599
00:28:15,790 –> 00:28:18,010
ماسک دارای همان
600
00:28:18,010 –> 00:28:20,650
مقدار پیکسل و در نتیجه
601
00:28:20,650 –> 00:28:23,140
همان ابعاد تصویر ساده ما خواهد بود
602
00:28:23,140 –> 00:28:25,720
که کمی بعد از آن عبور می کنیم، اگرچه پیکسل
603
00:28:25,720 –> 00:28:28,510
های آن کاملاً سیاه خواهند بود زیرا همه
604
00:28:28,510 –> 00:28:31,450
آنها دارای شدت صفر هستند.
605
00:28:31,450 –> 00:28:34,150
اکنون انجام دهید این است که این ماسک را پر کنید، مقداری
606
00:28:34,150 –> 00:28:38,020
تصویر سیاه با چند ضلعی ما با استفاده از
607
00:28:38,020 –> 00:28:42,280
تابع سری باز fill fill وجود دارد که CV
608
00:28:42,280 –> 00:28:46,780
به poly poly است
609
00:28:46,780 –> 00:28:50,520
، ما ماسک خود را با مثلث خود پر می کنیم.
610
00:28:50,520 –> 00:28:53,170
آرگومان سوم مشخص می کند که
611
00:28:53,170 –> 00:28:55,360
رنگ چند ضلعی ما که می
612
00:28:55,360 –> 00:28:59,260
خواهیم کاملاً سفید باشند، بنابراین کاری که
613
00:28:59,260 –> 00:29:01,210
میخواهیم انجام دهیم این است که مثلثی را برداریم
614
00:29:01,210 –> 00:29:04,060
که مرزهای آن را در اینجا مشخص کردهایم
615
00:29:04,060 –> 00:29:07,450
و آن را روی ماسک اعمال کنیم به طوری که
616
00:29:07,450 –> 00:29:10,360
ناحیه محدود شده توسط خطوط چند ضلعی
617
00:29:10,360 –> 00:29:13,480
کاملاً سفید شود. کاری که اکنون انجام میدهیم این
618
00:29:13,480 –> 00:29:16,870
است که ماسک بازگشتی اصلاح شده
619
00:29:16,870 –> 00:29:21,640
و
620
00:29:21,640 –> 00:29:24,670
به جای نشان دادن تصویر Ken، مقدار بازگشتی
621
00:29:24,670 –> 00:29:28,830
ناحیه تابع مورد علاقه ما را نشان می دهد
622
00:29:28,830 –> 00:29:30,970
و تصویری که قرار است در آن ارسال کنیم،
623
00:29:30,970 –> 00:29:33,850
به سادگی تصویر Kenny
624
00:29:33,850 –> 00:29:34,690
خواهد بود،
625
00:29:34,690 –> 00:29:39,370
اجازه دهید کد را اجرا کنیم، Py را اجرا کنیم. thon Alain’s dot
626
00:29:39,370 –> 00:29:41,920
py و یک استثنا ایجاد می کند و این به این
627
00:29:41,920 –> 00:29:45,400
دلیل است که fill poly تابع fill poly
628
00:29:45,400 –> 00:29:48,490
ناحیه ای را پر می کند که توسط چندین چند ضلعی محدود شده است
629
00:29:48,490 –> 00:29:51,280
نه فقط یک، حتی اگر
630
00:29:51,280 –> 00:29:52,900
من و شما هر دو می دانیم که
631
00:29:52,900 –> 00:29:55,630
فقط با یک چند ضلعی روبرو هستیم که نام آن را تغییر می دهیم. این
632
00:29:55,630 –> 00:29:58,330
متغیر از مثلث به چند ضلعی برای
633
00:29:58,330 –> 00:30:01,030
سازگاری و ما آن را برابر با
634
00:30:01,030 –> 00:30:04,390
آرایه ای از چند ضلعی ها قرار می دهیم در مورد ما
635
00:30:04,390 –> 00:30:07,690
آرایه ای از یک چند ضلعی این را از
636
00:30:07,690 –> 00:30:11,950
مثلث به چند ضلعی تغییر می دهیم اگر این
637
00:30:11,950 –> 00:30:17,500
کد را دوباره اجرا کنیم، ماسک ما وجود دارد و داخل
638
00:30:17,500 –> 00:30:20,260
ماسک در آنجا وجود دارد. این چند ضلعی با رئوس مشخص شده ناحیه محصور است،
639
00:30:20,260 –> 00:30:23,350
640
00:30:23,350 –> 00:30:25,210
اکنون ممکن است از خود بپرسید که چرا
641
00:30:25,210 –> 00:30:27,430
ما همه اینها را به خوبی پشت سر گذاشتیم این ویدیو
642
00:30:27,430 –> 00:30:28,660
به اندازه کافی طولانی شده است،
643
00:30:28,660 –> 00:30:30,730
بنابراین بیایید در مورد آن صحبت کنیم که در
644
00:30:30,730 –> 00:30:34,120
درس بعدی قبلاً ماسکی با همان ابعاد ایجاد کردیم.
645
00:30:34,120 –> 00:30:36,850
به عنوان تصویر جاده خود
646
00:30:36,850 –> 00:30:39,040
، منطقه مورد علاقه
647
00:30:39,040 –> 00:30:41,050
و تصویر جاده خود را با رئوس بسیار خاص
648
00:30:41,050 –> 00:30:44,320
در امتداد محور x و y شناسایی کردیم که
649
00:30:44,320 –> 00:30:47,740
سپس برای پر کردن ماسک خود از تصویر
650
00:30:47,740 –> 00:30:50,500
سمت راست استفاده کردیم، چرا مهم است خوب، ما
651
00:30:50,500 –> 00:30:52,540
از آن استفاده می کنیم تا فقط بخش خاصی
652
00:30:52,540 –> 00:30:55,740
از تصویر را نشان دهیم،
653
00:30:55,960 –> 00:30:59,830
هر چیز دیگری را که می خواهیم پنهان کنیم،
654
00:31:00,090 –> 00:31:02,520
بنابراین درک می کنیم که چگونه از
655
00:31:02,520 –> 00:31:05,730
این تصویر برای پوشاندن تصویر ساده خود استفاده می کنیم تا
656
00:31:05,730 –> 00:31:07,620
فقط منطقه مورد علاقه را نشان دهیم که
657
00:31:07,620 –> 00:31:09,900
توسط آن ردیابی شده است. اگر قبلاً با اعداد باینری آشنایی دارید،
658
00:31:09,900 –> 00:31:12,750
به درک اولیه از چند ضلعی های مثلثی نیاز
659
00:31:12,750 –> 00:31:16,140
دارید
660
00:31:16,140 –> 00:31:18,480
661
00:31:18,480 –> 00:31:20,540
که دو دقیقه یا بیشتر از این ویدیو را رد کنید،
662
00:31:20,540 –> 00:31:23,310
در غیر این صورت اکنون آن را معرفی می کنم و
663
00:31:23,310 –> 00:31:26,160
خیلی سریع این کار را انجام خواهم داد. معمولاً وقتی کسی به نمایش
664
00:31:26,160 –> 00:31:27,900
های دودویی
665
00:31:27,900 –> 00:31:30,240
فکر می کند، به صفرها فکر می کند و یک ها به
666
00:31:30,240 –> 00:31:32,010
طور خاص اعداد باینری
667
00:31:32,010 –> 00:31:34,140
در سیستم اعداد پایه-2 بیان می شوند
668
00:31:34,140 –> 00:31:37,560
که فقط از دو نماد معمولاً
669
00:31:37,560 –> 00:31:41,130
صفر استفاده می کند و یک به چه معنی است،
670
00:31:41,130 –> 00:31:43,830
مثلاً عدد 23 که یک
671
00:31:43,830 –> 00:31:47,880
نمایش دودویی است. 1 0
672
00:31:47,880 –> 00:31:50,760
673
00:31:50,760 –> 00:31:53,610
674
00:31:53,610 –> 00:31:56,610
675
00:31:56,610 –> 00:31:59,970
676
00:31:59,970 –> 00:32:02,550
1 11 با
677
00:32:02,550 –> 00:32:05,850
قدرت 2 اولین جعبه 2 را به
678
00:32:05,850 –> 00:32:09,300
توان 0 بخوان که به سادگی برابر است با 1 سپس 2 به
679
00:32:09,300 –> 00:32:12,540
توان 1 که برابر است با 2
680
00:32:12,540 –> 00:32:16,190
تا 2 به توان 7 تا
681
00:32:16,190 –> 00:32:20,010
128، اکنون هر کدام به این موضوع برمی گردیم. جعبه
682
00:32:20,010 –> 00:32:23,210
فقط میتواند یکی از دو مقدار 0 یا 1 را بپذیرد، بنابراین
683
00:32:23,210 –> 00:32:26,160
میخواهیم عدد 23 را
684
00:32:26,160 –> 00:32:28,350
که میخواهیم این عدد را در قالب باینری نشان دهیم، در
685
00:32:28,350 –> 00:32:31,470
باینری قرار دهیم، بنابراین کاری که میکنیم این است که
686
00:32:31,470 –> 00:32:34,410
با بالاترین مقدار 128 شروع کنیم و از
687
00:32:34,410 –> 00:32:38,630
خود بپرسیم آیا این مقدار در عدد 23
688
00:32:38,630 –> 00:32:41,970
128 به وضوح در عدد 23 نیست،
689
00:32:41,970 –> 00:32:45,990
بسیار بزرگ است، بنابراین می گذاریم که 0 64
690
00:32:45,990 –> 00:32:49,320
در 23 نیست، همچنین می گذاریم که 0 32
691
00:32:49,320 –> 00:32:52,200
است که قطعاً بزرگتر از 23 است، ما می گذاریم
692
00:32:52,200 –> 00:32:56,250
که به عنوان 0 16 این به 23 می رود پس به آن
693
00:32:56,250 –> 00:32:59,040
اختصاص داده می شود. عدد 1 و تا الان
694
00:32:59,040 –> 00:33:03,090
16 را مصرف کرده ایم 23 منهای 16 برابر است با 7
695
00:33:03,090 –> 00:33:05,940
، 7 باقی مانده است.
696
00:33:05,940 –> 00:33:08,940
697
00:33:08,940 –> 00:33:11,430
698
00:33:11,430 –> 00:33:13,830
بنابراین اکنون از جنگل
699
00:33:13,830 –> 00:33:15,330
هفت منهای چهار برابر با سه استفاده کرده ایم
700
00:33:15,330 –> 00:33:17,159
و سه مورد باقی مانده است که باید آنها را
701
00:33:17,159 –> 00:33:19,500
حساب کنیم فقط برای رفتن به سه بله
702
00:33:19,500 –> 00:33:21,929
اکنون فقط یک باقی مانده است که
703
00:33:21,929 –> 00:33:25,529
در واقع یکی وارد یکی می شود و
704
00:33:25,529 –> 00:33:28,380
نمایش باینری 23 وجود دارد که می توانیم
705
00:33:28,380 –> 00:33:30,539
صفرها را در ابتدا قطع کنیم و درست همانطور
706
00:33:30,539 –> 00:33:34,640
که قبلاً گفتیم 1 0 1 1 1
707
00:33:35,260 –> 00:33:37,510
بسیار خوب است، پس چرا من به طور تصادفی این کار را انجام ندهم
708
00:33:37,510 –> 00:33:40,360
شروع به صحبت در مورد اعداد باینری کنید، در حالی
709
00:33:40,360 –> 00:33:42,160
که تصویر سمت راست، من جلوتر رفتم و
710
00:33:42,160 –> 00:33:44,670
نمایش پیکسل آن را چاپ کردم،
711
00:33:44,670 –> 00:33:47,050
اندازه آرایه را صرفاً به دلیل بزرگ بودن آن تغییر دادم،
712
00:33:47,050 –> 00:33:49,480
اما توجه نکنید که
713
00:33:49,480 –> 00:33:51,550
چند ضلعی مثلثی چگونه
714
00:33:51,550 –> 00:33:54,130
شدت پیکسل 255
715
00:33:54,130 –> 00:33:56,410
و ناحیه سیاه اطراف را ترجمه می کند.
716
00:33:56,410 –> 00:33:58,830
شدت پیکسل 0 را ترجمه می کند
717
00:33:58,830 –> 00:34:01,710
که نمایش باینری 0 چقدر است در
718
00:34:01,710 –> 00:34:05,140
حالی که هیچ یک از این اعداد به 0 نمی
719
00:34:05,140 –> 00:34:07,840
رسند، بنابراین ما 0 را برای هر مکان نگهدار باقی
720
00:34:07,840 –> 00:34:10,510
می گذاریم و نمایش باینری 0 0 0 0 برای ما باقی
721
00:34:10,510 –> 00:34:10,980
722
00:34:10,980 –> 00:34:14,679
می گذارد و در مورد 255 خوب برای این کار به
723
00:34:14,679 –> 00:34:18,070
8 مکان نگهدار نیاز داریم. 2 تا 0 تا 2
724
00:34:18,070 –> 00:34:20,710
تا 7 و بنابراین اگر حسابی را که
725
00:34:20,710 –> 00:34:23,050
در مورد آن صحبت کردیم انجام دهید، متوجه خواهید شد که این یک
726
00:34:23,050 –> 00:34:25,570
نمایش باینری است که همه 8 یک نفر
727
00:34:25,570 –> 00:34:27,550
هستند زیرا همه این اعداد
728
00:34:27,550 –> 00:34:31,630
دقیقاً با هم جمع می شوند تا 25 به دست آید. 5 به عنوان یک یادداشت جانبی،
729
00:34:31,630 –> 00:34:34,360
اگر این را بر حسب بیتهایی در نظر بگیریم که در آن
730
00:34:34,360 –> 00:34:37,510
هر بیت یک مقدار باینری دارد و
731
00:34:37,510 –> 00:34:42,219
8 بیت از 1 بایت تشکیل میدهند
732
00:34:42,219 –> 00:34:45,580
733
00:34:45,580 –> 00:34:49,239
734
00:34:49,239 –> 00:34:51,219
. کاملاً سیاه
735
00:34:51,219 –> 00:34:54,610
هر پیکسل با مقدار 0 نسبت به
736
00:34:54,610 –> 00:34:56,830
نمایش دودویی شدت هر پیکسل
737
00:34:56,830 –> 00:34:59,230
در آن ناحیه، تمام
738
00:34:59,230 –> 00:35:01,780
صفرها 0 0 0 0 خواهد بود،
739
00:35:01,780 –> 00:35:04,990
همانطور که برای خطوط چند ضلعی که
740
00:35:04,990 –> 00:35:07,390
ناحیه آن کاملاً سفید است نسبت به
741
00:35:07,390 –> 00:35:09,400
نمایش دودویی هر
742
00:35:09,400 –> 00:35:11,680
شدت پیکسل در آن منطقه همه باشید
743
00:35:11,680 –> 00:35:15,460
چرا این چاه مهم است، ما می
744
00:35:15,460 –> 00:35:17,710
خواهیم این ماسک را روی تصویر زیربنایی خود اعمال کنیم
745
00:35:17,710 –> 00:35:21,160
تا در نهایت فقط ناحیه مورد نظر را نشان دهیم
746
00:35:21,160 –> 00:35:23,470
که منطقه ترسیم شده توسط
747
00:35:23,470 –> 00:35:27,070
کانتور چند ضلعی است. این کار را با
748
00:35:27,070 –> 00:35:30,100
اعمال بیت و عملیات بین
749
00:35:30,100 –> 00:35:33,370
دو تصویر انجام می دهیم. به صورت بیتی و عملیات به
750
00:35:33,370 –> 00:35:35,560
صورت عنصری بین دو
751
00:35:35,560 –> 00:35:38,790
تصویر بین دو آرایه پیکسل رخ می دهد،
752
00:35:38,790 –> 00:35:41,440
اکنون هر دوی این تصاویر دارای
753
00:35:41,440 –> 00:35:43,750
شکل آرایه یکسان و بنابراین ابعاد یکسان
754
00:35:43,750 –> 00:35:46,320
و یکسان هستند.
755
00:35:46,320 –> 00:35:49,210
با اعمال انتهای بیتی پیکسلها را با استفاده از انتهای بیتی اضافه کنید،
756
00:35:49,210 –> 00:35:52,630
زیرا به صورت عنصری اتفاق میافتد، پس
757
00:35:52,630 –> 00:35:55,210
ما انتهای بیتی هر
758
00:35:55,210 –> 00:35:59,559
پیکسل همولوگ را در هر دو آرایه میگیریم و
759
00:35:59,559 –> 00:36:02,230
نحوه عملکرد بیتی این است که اجازه دهید
760
00:36:02,230 –> 00:36:07,210
دو عدد دودویی 0 1 1 0 0 1 را تصور
761
00:36:07,210 –> 00:36:08,859
کنید. ریاضی را که قبلاً
762
00:36:08,859 –> 00:36:13,420
دیدید انجام دهید، به عدد 25 و 1 1 0
763
00:36:13,420 –> 00:36:17,559
0 1 0 پی خواهید برد که عدد 50
764
00:36:17,559 –> 00:36:20,020
765
00:36:20,020 –> 00:36:22,089
766
00:36:22,089 –> 00:36:27,250
خواهد بود.
767
00:36:27,250 –> 00:36:31,089
هر دو جفت در جفت اول
768
00:36:31,089 –> 00:36:34,119
یکی هستند چون یکی از اینها 0 است ما یک 0 می گذاریم
769
00:36:34,119 –> 00:36:37,359
و دومی هر دو یک هستند بنابراین در این جفت
770
00:36:37,359 –> 00:36:40,720
یک عدد 1 قرار می دهیم یکی از آنها
771
00:36:40,720 –> 00:36:43,329
صفر است بنابراین 0 می گذاریم و این کار را ادامه می دهیم.
772
00:36:43,329 –> 00:36:45,960
تا زمانی که در نهایت عملیات پایانی
773
00:36:45,960 –> 00:36:51,160
حاصل 0 1 0 0 0 0 به دست میآید، چه میشود
774
00:36:51,160 –> 00:36:54,130
اگر انتهای بیتی همه صفرها را
775
00:36:54,130 –> 00:36:56,890
با هر مقدار دیگری به خوبی در نظر بگیریم، مهم نیست که
776
00:36:56,890 –> 00:36:59,740
در طول عملیات،
777
00:36:59,740 –> 00:37:02,650
شما همیشه حداقل یک 0 خواهید داشت که به معنای
778
00:37:02,650 –> 00:37:05,530
نتیجه است. عملیات پایانی
779
00:37:05,530 –> 00:37:08,829
بدون توجه به اینکه چه مقداری را انتخاب می کنیم، همه صفرها را
780
00:37:08,829 –> 00:37:11,500
به دست می دهد بر خلاف آن عمل کنید، بنابراین
781
00:37:11,500 –> 00:37:13,780
به دو تصویر خود بازگردیم، ناحیه سیاهی که
782
00:37:13,780 –> 00:37:15,670
پیکسلهای آن دارای مقادیر شدت هستند که
783
00:37:15,670 –> 00:37:17,770
با عدد باینری که
784
00:37:17,770 –> 00:37:20,530
در مورد صفر صفر صفر صفر صحبت کردیم، با
785
00:37:20,530 –> 00:37:23,650
گرفتن بیت و با عمل کردن آن
786
00:37:23,650 –> 00:37:25,089
در برابر مقادیر پیکسل در
787
00:37:25,089 –> 00:37:27,069
ناحیه مربوطه مطابقت دارد. آرایه دیگر
788
00:37:27,069 –> 00:37:29,440
نتیجه همیشه یک
789
00:37:29,440 –> 00:37:34,059
مقدار دودویی 0 0 0 0 خواهد بود
790
00:37:34,059 –> 00:37:37,150
که به عدد 0 ترجمه می شود که به این معنی است که تمام شدت پیکسل ها
791
00:37:37,150 –> 00:37:40,000
در آن ناحیه دارای
792
00:37:40,000 –> 00:37:41,980
مقدار 0 خواهند بود که نتایج به دست آمده
793
00:37:41,980 –> 00:37:44,190
کاملاً سیاه خواهند شد.
794
00:37:44,190 –> 00:37:48,490
پوشاندن کل منطقه ما
795
00:37:48,490 –> 00:37:50,470
می دانیم که عملیات از نظر عنصر انجام می شود،
796
00:37:50,470 –> 00:37:53,349
بنابراین تمام پیکسل های سفید در این منطقه
797
00:37:53,349 –> 00:37:55,809
از آرایه در برابر
798
00:37:55,809 –> 00:37:57,910
منطقه مربوطه آرایه دیگر عمل
799
00:37:57,910 –> 00:38:01,390
می کنند، این منطقه بی تاثیر می ماند،
800
00:38:01,390 –> 00:38:02,740
801
00:38:02,740 –> 00:38:05,200
چرا ممکن است خوب بپرسید، قبلاً
802
00:38:05,200 –> 00:38:06,849
به این نتیجه رسیده ایم که از آنجایی که کانتور چند ضلعی
803
00:38:06,849 –> 00:38:09,880
کاملاً سفید است از اینکه
804
00:38:09,880 –> 00:38:11,770
نمایش دودویی شدت هر پیکسل
805
00:38:11,770 –> 00:38:14,200
در آن ناحیه
806
00:38:14,200 –> 00:38:17,470
یکبار است اگر بیتی را بگیرید و از
807
00:38:17,470 –> 00:38:20,440
آنهایی که دارای هر مقدار باینری دیگری
808
00:38:20,440 –> 00:38:23,170
هستند، تأثیری نخواهد داشت، میتوانیم
809
00:38:23,170 –> 00:38:26,530
این را امتحان کنیم، همانطور که مقدار بیت و
810
00:38:26,530 –> 00:38:29,589
این دو مقدار را به یک میگیریم، بنابراین یک مورد 1 را
811
00:38:29,589 –> 00:38:33,640
اینجا اینجا و اینجا قرار میدهیم
812
00:38:33,640 –> 00:38:35,050
و این کار را ادامه میدهیم. برای به دست آوردن
813
00:38:35,050 –> 00:38:38,260
نتایج زیر که اخطار همان یکی
814
00:38:38,260 –> 00:38:41,020
از مقادیر ما است به این معنی که گرفتن
815
00:38:41,020 –> 00:38:44,230
انتهای بیتی آن با یک ها
816
00:38:44,230 –> 00:38:47,680
تأثیری ندارد و بنابراین در تصویر ما گرفتن
817
00:38:47,680 –> 00:38:50,260
انتهای بیتی این دو ناحیه
818
00:38:50,260 –> 00:38:53,770
نیز اثر صفر خواهد داشت که به این معنی است. ما
819
00:38:53,770 –> 00:38:56,770
با موفقیت تصویر زیرک خود را پوشاندهایم تا
820
00:38:56,770 –> 00:38:59,170
در نهایت فقط ناحیه مورد نظر را نشان دهیم
821
00:38:59,170 –> 00:39:01,359
که منطقه ردیابی شده توسط
822
00:39:01,359 –> 00:39:04,470
کانتور چند ضلعی است.
823
00:39:05,620 –> 00:39:07,960
824
00:39:07,960 –> 00:39:13,600
825
00:39:13,600 –> 00:39:16,330
826
00:39:16,330 –> 00:39:18,820
canny
827
00:39:18,820 –> 00:39:22,270
and mask erase this تابع Universal
828
00:39:22,270 –> 00:39:26,340
عملگر پایتون را اجرا می کند پایان
829
00:39:32,970 –> 00:39:37,680
در نهایت ما تصویر ماسک شده را برمی گردانیم
830
00:39:37,680 –> 00:39:43,270
و فقط تصویر برش داده شده را برابر با
831
00:39:43,270 –> 00:39:47,020
مقدار بازگشتی ناحیه مورد نظر قرار می
832
00:39:47,020 –> 00:39:49,329
دهیم که در تصویر Kenny ارسال می کنیم همانطور که انجام دادیم.
833
00:39:49,329 –> 00:39:51,789
در ویدیوی قبلی و ما
834
00:39:51,789 –> 00:39:54,910
تصویر خراب را به جای
835
00:39:54,910 –> 00:39:55,529
ترمینال
836
00:39:55,529 –> 00:40:01,150
پایتون لین خود نشان خواهیم داد و همه چیز
837
00:40:01,150 –> 00:40:04,000
بر این اساس انجام شد، منطقه مورد نظر را ایزوله کردیم
838
00:40:04,000 –> 00:40:06,400
و هر چیز دیگری را پوشانده بودیم.
839
00:40:06,400 –> 00:40:09,369
مرحله نهایی تشخیص Lane
840
00:40:09,369 –> 00:40:11,529
استفاده از تکنیک تبدیل Hough برای
841
00:40:11,529 –> 00:40:13,510
خطوط مستقیم را در منطقه
842
00:40:13,510 –> 00:40:16,059
مورد نظر خود تشخیص دهید و بنابراین
843
00:40:16,059 –> 00:40:16,680
خطوط خطوط
844
00:40:16,680 –> 00:40:19,420
را شناسایی کرده ایم که تاکنون لبه های
845
00:40:19,420 –> 00:40:21,190
تصویر خود را شناسایی کرده و منطقه مورد نظر را جدا کرده
846
00:40:21,190 –> 00:40:23,349
ایم اکنون از
847
00:40:23,349 –> 00:40:24,910
تکنیکی استفاده خواهیم کرد که
848
00:40:24,910 –> 00:40:27,309
خطوط مستقیم را در تصویر تشخیص می دهد و بنابراین شناسایی
849
00:40:27,309 –> 00:40:29,410
خطوط خط این تکنیک به عنوان
850
00:40:29,410 –> 00:40:31,690
تبدیل Hough شناخته می شود، با ترسیم
851
00:40:31,690 –> 00:40:33,819
فضای مختصات 2 بعدی x و y شروع می کنیم و
852
00:40:33,819 –> 00:40:36,910
در داخل آن یک خط مستقیم می دانیم
853
00:40:36,910 –> 00:40:38,289
که یک خط مستقیم
854
00:40:38,289 –> 00:40:41,940
با معادله y برابر با MX به علاوه B نشان داده می شود.
855
00:40:41,940 –> 00:40:45,789
تا اینجا چیز جدیدی نیست فقط یک ریاضی
856
00:40:45,789 –> 00:40:50,010
ساده خط مستقیم ما دارای دو پارامتر M و B است
857
00:40:50,010 –> 00:40:52,329
که در حال حاضر آن را به عنوان
858
00:40:52,329 –> 00:40:55,089
تابعی از x و y ترسیم می کنیم، اما می توانیم
859
00:40:55,089 –> 00:40:57,299
این خط را در فضای پارامتری
860
00:40:57,299 –> 00:41:01,150
نیز نشان دهیم. فضای Hough را به صورت B
861
00:41:01,150 –> 00:41:03,970
در مقابل M می نامیم، می دانیم که قطع y این
862
00:41:03,970 –> 00:41:06,670
خط 2 است و شیب خط به
863
00:41:06,670 –> 00:41:09,460
سادگی افزایش می یابد، تغییر در Y
864
00:41:09,460 –> 00:41:12,250
بر روی تغییر در X که با
865
00:41:12,250 –> 00:41:15,339
توجه به قطع y و شیب این به 3 ارزیابی می شود.
866
00:41:15,339 –> 00:41:18,069
می توان کل خط را به صورت یک
867
00:41:18,069 –> 00:41:21,369
نقطه در فضای هاف ترسیم کرد، اکنون تصور کنید که
868
00:41:21,369 –> 00:41:23,819
به جای یک خط، یک نقطه واحد
869
00:41:23,819 –> 00:41:26,849
در مختصات 12 و 2
870
00:41:26,849 –> 00:41:30,579
داشته باشیم، خطوط ممکن زیادی وجود دارد که می توانند
871
00:41:30,579 –> 00:41:33,430
از این نقطه عبور کنند، هر خط با
872
00:41:33,430 –> 00:41:36,039
مقادیر متفاوت برای M و B می
873
00:41:36,039 –> 00:41:37,839
توانید خطی داشته باشید که با مقادیر M و
874
00:41:37,839 –> 00:41:42,130
B 2 و 8 3 و 6
875
00:41:42,130 –> 00:41:50,910
4 و 4 5 و 2 6 و 0 به همین ترتیب و غیره از آن عبور کند،
876
00:41:51,140 –> 00:41:54,410
توجه کنید که یک نقطه در فضای X&Y
877
00:41:54,410 –> 00:41:57,019
با یک خط در Hough نشان داده می شود. فضا
878
00:41:57,019 –> 00:42:00,589
به عبارت دیگر با رسم خانواده
879
00:42:00,589 –> 00:42:03,230
خطوطی که از نقاط ما می گذرد، هر
880
00:42:03,230 –> 00:42:06,259
خط با جفت مقادیر متمایز M و B خود
881
00:42:06,259 –> 00:42:09,920
، یک خط کامل از
882
00:42:09,920 –> 00:42:13,060
جفت های مقدار M و B در فضای هاف ایجاد می کند،
883
00:42:13,060 –> 00:42:15,520
چه می شود اگر ما نیز یک نقطه در هشت داشته باشیم و
884
00:42:15,520 –> 00:42:18,280
یک بار دیگر خطوط زیادی وجود دارد که
885
00:42:18,280 –> 00:42:20,920
می توانند از این نقطه عبور کنند خط با
886
00:42:20,920 –> 00:42:23,350
مقادیر مختلف برای M و B همه
887
00:42:23,350 –> 00:42:25,450
این مقادیر مختلف برای M و B
888
00:42:25,450 –> 00:42:27,940
که با یک خط در فضای پارامتریک نشان داده می
889
00:42:27,940 –> 00:42:30,400
شود، نقطه ای است که
890
00:42:30,400 –> 00:42:33,040
هر وقت یک سری از نقاط را می بینید و به
891
00:42:33,040 –> 00:42:35,590
ما می گویند که این نقاط
892
00:42:35,590 –> 00:42:38,950
با یک خط به هم متصل می شوند از خود بپرسید
893
00:42:38,950 –> 00:42:42,880
همانطور که قبلاً ذکر شد، سؤال کنید که آن خط چیست،
894
00:42:42,880 –> 00:42:45,580
خطوط ممکن زیادی وجود دارد
895
00:42:45,580 –> 00:42:48,490
که می توانند از هر نقطه به طور جداگانه از
896
00:42:48,490 –> 00:42:50,740
هر خط با مقادیر شیب و
897
00:42:50,740 –> 00:42:53,860
قطع y مختلف عبور کنند، اما یک
898
00:42:53,860 –> 00:42:56,290
خط وجود دارد که با هر دو نقطه سازگار است،
899
00:42:56,290 –> 00:42:59,440
می توانیم با نگاه کردن به نقطه تعیین کنیم که
900
00:42:59,440 –> 00:43:01,530
تقاطع در فضای هاف
901
00:43:01,530 –> 00:43:04,240
زیرا آن نقطه تقاطع
902
00:43:04,240 –> 00:43:07,710
نشان دهنده مقادیر M و B یک خط است
903
00:43:07,710 –> 00:43:10,330
که با عبور از هر دو نقطه ما سازگار است
904
00:43:10,330 –> 00:43:13,930
که در این حالت دارای شیب و تقاطع
905
00:43:13,930 –> 00:43:16,980
y 4 است،
906
00:43:16,980 –> 00:43:19,380
فرض کنید یک نقطه بیشتر از
907
00:43:19,380 –> 00:43:23,190
فضای تصویر ما در آن نقطه وجود دارد.