CSTV – Capture the flag 2023: Sân chơi chuyên nghiệp dành cho các Pentester tương lai tại Việt Nam

Sự kiện VSEC - BLOG

Ngày 06/01/2024, Làng Công nghệ An toàn an ninh thông tin đã tổ chức thành công CSTV – Capture the flag 2023: cuộc thi CTF dành cho sinh viên các trường đại học tại Việt Nam trên toàn quốc dưới hình thức online.

Cuộc thi đã thu hút 40 đội tranh tài, là các bạn sinh viên đến từ các trường đại học công nghệ hàng đầu như Đại học Bách Khoa – Đại học Quốc gia TP.HCM, Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh, Đại học Khoa học Tự nhiên – Đại học Quốc gia TP. Hồ Chí Minh, Đại học Khoa học Tự nhiên – Đại học Quốc gia Hà Nội, Học viện kỹ thuật mật mã, Học viện Bưu chính Viễn thông, Đại học FPT, v.v…

Cuộc thi diễn ra online trên toàn quốc thu hút 40 đội thi đến từ nhiều trường đại học trên cả nước

Phát biểu khai mạc tại cuộc thi, bà Vũ Thị Đào – Trưởng phòng Khoa học công nghệ và Hợp tác phát triển Học viện Kỹ thuật mật mã – Trưởng làng Công nghệ an toàn an ninh mạng nhấn mạnh: “Cuộc thi CSTV Capture The Flag không chỉ là một hoạt động học thuật, mà còn là nơi để các bạn thể hiện kỹ năng, kiến thức và sự sáng tạo của mình trong giải quyết các thách thức về an ninh mạng. Cuộc thi này đánh dấu bước khởi đầu của hành trình của các bạn trở thành những chuyên gia và kiểm thử viên xâm nhập trong lĩnh vực an ninh mạng”.

Nội dung của đề thi lần này với các loại thử thách rất đa dạng và phong phú, bao gồm: MISC, Mobile, Cryptography, Network / Forensic, Web… Các đội thi giải đề thi liên tục trong 8 giờ đồng hồ. Chung cuộc, điểm số của các đội được cập nhật liên tục và xuất hiện nhiều bất ngờ, đã có những pha lộn ngược dòng thành công và sự tiếc nuối của nhiều thí sinh khi chưa kịp hoàn thiện. Kết quả chung cuộc, giải nhất đã thuộc về đội KCSC.firstdance (Học viện Kỹ thuật mật mã), giải Nhì thuộc về đội A.k.a.t.s.u.ki (Học viện Kỹ thuật mật mã) và hai giải ba lần lượt thuộc về đội VN1337 và RobinHust (Đại học Bách Khoa Hà Nội). Ngoài giải thưởng từ BTC của cuộc thi, các bạn sinh viên cũng sẽ nhận được nhiều cơ hội được thực tập và làm việc tại Công ty Cổ phần Nessar Việt Nam và Công ty Cổ phần An ninh mạng Việt Nam.

“Đây là lần đầu tiên Làng Công nghệ An toàn an ninh thông tin tổ chức cuộc thi CTF với quy mô lớn trên toàn quốc như vậy nhằm tạo ra một sân chơi cho các bạn sinh viên có thể tranh tài, học hỏi kinh nghiệm lẫn nhau. Cuộc thi này không chỉ có giá trị thực tiễn cao mà còn góp phần thúc đẩy đào tạo nguồn nhân lực có trình độ cao về ATTT trong công cuộc đảm bảo an toàn thông tin trên không gian mạng.” – ông Trương Đức Lượng, chủ tịch Hội đồng quản trị Công ty cổ phần An ninh mạng Việt Nam – Trưởng làng Công nghệ an toàn an ninh mạng chia sẻ trong chương trình.

Về CSTV – Cyber Security Technology Village:

Làng Công nghệ An toàn không gian mạng là thành viên của Techfest Việt Nam từ năm 2021 nhằm kết nối các Bộ/Ngành, Doanh nghiệp và Tổ chức với các đơn vị hoạt động trong lĩnh vực bảo mật tại Việt nam, xóa bỏ những rào cản vô hình khiến doanh nghiệp gặp khó khăn khi muốn tìm hiểu về an toàn thông tin, như lo ngại về chi phí, nguồn thông tin hay lượng kiến thức phức tạp, …

Làng được thành lập với sự tham gia đại diện Trưởng làng là Công ty Cổ phần An ninh mạng Việt Nam, Công ty Cổ phần Nessar Việt Nam, tổ chức Cyberkid Việt Nam và Học viện Kỹ thuật mật mã.

Trong suốt thời gian thành lập từ năm 2021 đến nay, Làng đã phối hợp với các Bộ/Ngành, các doanh nghiệp và hơn 200 thành viên hội đồng chuyên gia về bảo mật tại Việt Nam và trên thế giới tổ chức các Hội thảo, Cuộc thi về An ninh mạng đồng hành với Techfest Việt Nam. Mới đây nhất là tham gia cùng Techfest Việt Nam 2023 kết nối hệ sinh thái khởi nghiệp tại Australia và đồng hành trong sự kiện The Vietnam-Japan Autumn School on Cyber Security phối hợp với Học viện Kỹ thuật mật mã và Viện Khoa học và Công nghệ tiên tiến Nhật Bản.

Một số phương pháp xử lý ảnh cơ bản (Phần 4)

Công nghệ

Một bức ảnh màu bao gồm các kênh màu: đỏ, xanh lá cây, và xanh dương. Bạn đọc hẳn không xa lạ với các tương tác với từng điểm ảnh thông qua thao tác với mảng, ma trận numpy. Tuy nhiên, làm thế nào để ta có thể chia hình ảnh ra thành các thành phần riêng biệt?

Và các bạn có thể đoán rằng, chia trong tiếng Anh là split. Do đó, hẳn có hàm cv2.split nào đó tồn tại để làm công việc này. Trước hết, chúng ta sẽ quan sát bức ảnh phong cảnh về mùa hè dưới đây, bao gồm màu đỏ của hoa phượng hay màu xanh nước biển của bình nước trên trần tòa nhà, vân vân và mây mây. So với bức ảnh gốc, các kênh màu có sự chuyển biến giá trị màu rõ rệt trong khoảng giá trị mà chúng biểu diễn. Chúng ta sẽ cùng phân tích đoạn mã dưới đây.

Dòng 1-12, chúng ta làm tương tự như các bài học trước. Tuy nhiên, ở dòng 14, ta sẽ sử dụng hàm cv2.split để chia giá trị kênh màu vào các biến tương ứng: r, g và b. Thông thường thì chúng ta sẽ nghĩ ngay tới thứ tự RGB, tuy nhiên, opencv lưu trữ ảnh RGB như mảng numpy ở trình tự ngược lại: trình tự BGR.

Dòng 16-19 hiển thị các bức ảnh lấy ra từ kênh màu tương ứng. Bên cạnh đó, bạn đọc có thể sử dụng cv2.merge – dòng 21, để ghép các kênh màu thành bức ảnh đọc vào ban đầu bằng cách truyền vào các giá trị lấy giá theo thứ tự tương ứng lúc ta đọc ảnh.

Một phương pháp khác để hiển thị kênh màu đó là chúng ta sẽ chỉ hiển thị giá trị thực của kênh màu. Trước hết, chúng ta vẫn sử dụng cv2.split để lấy ra các giá trị thành phần của bức ảnh. Sau đó, ta tạo lại bức ảnh với cài đặt toàn bộ các điểm ảnh khác ngoài giá trị kênh màu hiện tại thì đều bằng 0. Ở dòng 24, khởi tạo một ma trận z với kích thước là bức ảnh đang xét với giá trị tất cả các điểm ảnh là 0. Tiếp đó, để có thể tạo kênh màu đỏ được biểu diễn trong ảnh, ta gọi hàm cv2.merge để ghép kênh màu đỏ với hai kênh màu còn lại nhưng có giá trị điểm ảnh bằng 0. Ta thực hiện tương tự với các trường hợp còn lại ở dòng 26-27. Như vậy, ta thu được kết quả với kênh màu mà mỗi thành phần ảnh biểu diễn như sau:

Trong chuỗi bài học đọc về thị giác máy tính qua opencv và numpy, chúng ta mới chỉ tìm hiều về hệ màu RGB, tuy nhiên trong thực tế, có rất nhiều các hệ màu khác nhau được sử dụng rộng rãi. Hệ màu HSV – Hue-Saturation-Value, rất gần với cách mà còn người nghĩ và tiếp nhận màu sắc. Bên cạnh đó còn có hệ màu L*a*b*có thể điều chỉnh cách mà chúng ta cảm nhận màu sắc. OpenCV hỗ trợ rất nhiều hệ màu trong số đó. Và việc hiểu được cách con người cảm nhận màu sắc để áp dụng cho máy tính tiếp nhận vẫn còn là một trong những bài toán được nghiên cứu sôi nổi. Chi tiết hơn thì các bạn có thể tham khảo bài viết mở đầu của chuỗi bài này để có thêm góc nhìn về cách màu sắc hoạt động. Để không đi vào chi tiết quá trình cảm nhận màu sắc, chúng ta sẽ cùng nhau tìm hiểu về cách chuyển đổi hệ màu trong OpenCV. Ngoài ra, nếu bạn đọc nghĩ thị giác máy tính nên sử dụng một hệ màu khác ngoài RGB thì hãy thử nghiệm và thảo luận với mình nhé, còn đánh giá chi tiết sẽ được trình bày ở các bài đọc sau. Bây giờ, chúng ta sẽ tìm hiều về một số hàm hỗ trợ chuyển đổi hệ màu:

Dòng 1-13, ta thực hiện khai báo thư viện, định nghĩa tham số đầu vào, đọc và hiển thị hình ảnh. Tiếp đó, ở dòng 15, chúng ta chuyển đổi ảnh từ hệ màu RGB qua ảnh xám bằng cách cài đặt cờ cv2.COLOR_BGR2GRAY. Chuyển đổi qua hệ màu HSV và L*a*b* tương tự ở dòng 18-22. Kết quả đoạn mã thu được như sau:

Vai trò của hệ màu trong xử lý ảnh và thị giác máy tính vô cùng quan trong, tuy nhiên cũng khá phức tạp. Nếu bạn đọc vừa mới bắt đầu tu luyện bộ môn này, mình nghĩ rằng nghiên cứu xoay quanh hệ màu RGB không phải là ý tồi. Hẹn gặp lại bạn đọc ở bài học sau.

Một số phương pháp xử lý ảnh cơ bản (Phần 3)

Công nghệ

Trong bài học này, chúng ta sẽ tìm hiểu về thao tác bit trên ảnh và ứng dụng của các thao tác này vào kỹ thuật masking – mặt nạ, cho phép chúng ta lọc ra vùng quan trọng, xác định vật thể trong ảnh.

1.Thao tác bit trong xử lý ảnh

Bạn đọc chắc hẳn không hề xa lạ gì khi nhắc tới các phép toán với bit. Trong trường hợp bạn là người mới tìm hiểu, thao tác bit gồm 4 phép toán sau: AND, OR, XOR và NOT. Thao tác bit hoạt động với các phép toán nhị phân gồm hai kết quả là 0, hoặc 1. Chúng ta có thể hình dung với điểm ảnh “tắt” khi giá trị của nó bằng 0, và điểm ảnh “bật” khi giá trị điểm ảnh lớn hơn 0. Chúng ta sẽ bắt đầu tìm hiểu kỹ hơn qua ví dụ sau:

dòng 1-2, ta thực hiện khai báo thư viện sử dụng, bao gồm: opencv và numpy. Tiếp đó, chúng ta khởi tạo một ma trận số 0 có kích thước 300×300 qua dòng 4. Sau đó, ta vẽ một hình vuông màu trắng có kích thước 250×250, (275 – 25 = 250), ở trung tâm bức hình. Hàm vẽ hình này đã được trình bày trong các bài viết hướng dẫn vẽ hình. Chúng ta thực hiện tương tự khi vẽ hình tròn ở dòng 8-10. Kết quả của đoạn mã:

Nhắc lại một chút về phép toán trên bit, bạn đọc có thể theo dõi qua bảng kết quả sau:

AND OR XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

 

NOT
0 1
1 0

 

Ở phần tiếp sau đây, chúng ta sẽ sử dụng ví dụ phía trên về hình vuông và hình tròn để thực hiện các phép toán bit

Như mình đã đề cập ở trên, điểm ảnh “bật” nếu nó có giá trị lớn hơn 0, và “tắt” khi giá trị bằng 0. Các hàm tính bit trong opencv thực hiện dựa trên các điều kiện này. Để có thể thực hiện phép tính bit, ta giả định (phần lớn trường hợp) thực hiện qua việc so sánh hai điểm ảnh (ngoại lệ duy nhất ở phép NOT). Chúng ta sẽ so sánh mỗi điểm ảnh và thực hiện biểu diễn bit như sau:

+AND: trả về là đúng – true, nếu cả hai giá trị điểm ảnh đều lớn hơn 0

+OR: trả về là đúng – true, nếu một trong hai giá trị điểm ảnh lớn hơn 0

+XOR: trả về là đúng – true, khi một trong hai giá trị điểm ảnh lớn hơn không, không bao gồm cả hai.

+NOT: thực hiện đảo ngược giá trị “bật” và “tắt” điểm ảnh

dòng 11, ta thực hiện hàm cv2.bitwise_and, phép AND giữa hình vuông và hình tròn. Như vậy, hàm này trả về là đúng khi và chỉ khi cả hai giá trị điểm ảnh đều lớn hơn 0. Kết quả bạn đọc có thể theo dõi qua hình dưới với cửa sổ AND. Chúng ta thấy rằng là các góc của hình vuông mất đi, thay thế bằng đường tròn – 0 AND 0 = 0. Kế đó là phép OR với kết quả thu được là hình vuông và hình tròn màu trắng kết hợp lại với nhau. Hai phép toán còn lại, bạn sẽ theo dõi được qua kết quả dưới đây:

 

2.Kỹ thuật mặt nạ – masking

Trong phần tìm hiểu phía trên, chúng ta đã cùng nhau tìm hiểu các hàm thao tác bit. Bây giờ, chúng ta đã sẵn sàng đi vào kỹ thuật masking – một kỹ thuật đơn giản mà vô cùng hiệu quả, phổ biến trong xử lý ảnh. Sử dụng mặt nạ cho phép chúng ta chú ý duy nhất vào một vùng trên bức ảnh. Để có thể dễ dàng hình dung hơn, hãy giả sử rằng bạn đọc muốn xây dựng một hệ thống nhận diện khuôn mặt. Vùng trên ảnh mà chúng ta muốn thu được chính là vùng chứa khuôn mặt. Do đó, việc xây dựng một mặt nạ – mask, cho phép ta hiển thị duy nhất hình ảnh khuôn mặt. Chúng ta sẽ đi vào chi tiết hơn qua ví dụ sau:

Với bức ảnh ở góc trên cùng bên trái, bạn đọc có thể thấy rằng có khá nhiều vật thể, khung cảnh diễn ra. Tuy nhiên, mình chỉ muốn lấy ra tổng quan nội dung như căn nhà cổ cùng một vài cây hoa phượng. Chúng ta có thể dễ dàng sử dụng phương pháp cắt ảnh ở bài học trước để trích xuất ra khu vực này, hoặc, chúng ta có thể sử dụng mặt nạ vào đây.

Bức ảnh trên cùng phía bên phải là mặt nạ mà mình sẽ sử dụng – hình vuông trắng ở giữa ảnh. Bằng cách sử dụng mặt nạ, chúng ta sẽ thu được bức ảnh ở phía dưới bao gồm ngôi nhà cũ kèm theo một ít hoa phượng.

Chúng ta sẽ cùng nhau xem xét đoạn mã sau đây:

Dòng 1-13, ta thực hiện các thao tác quen thuộc: khai báo thư viện, định nghĩa tham số truyền vào, và hiển thị bức ảnh.

Tiếp đó, chúng ta tạo một mặt nạ – mask, với kích thước như bức ảnh truyền vào – dòng 15. Để có thể vẽ được hình vuông, trước hết chúng ta cần tính tọa độ tâm của hình ảnh đầu vào bằng cách chia đôi chiều ngang và chiều dọc qua dòng 16. Cuối cùng, ta vẽ tứ giác ở dòng 17.

Bạn đọc nhớ lại hàm bitwise_and ở phần 1, đây là một hàm được sử dụng thường xuyên khi chúng ta đặt mặt nạ vào bức ảnh cần xử lý – thực hiện tại dòng 21. Phép AND trả về là true – đúng, với tất cả giá trị trong ảnh gốc, tuy nhiên, phần quan trọng là từ khóa mask. Bằng cách sử dụng từ khóa mask, cv2.bitwise_and sẽ xử lý điểm ảnh “bật” trong mặt nạ – trong ví dụ là phần hình vuông màu trắng trong mặt nạ. Chúng ta sẽ theo dõi thêm một ví dụ nữa tương tự khi thay phần “bật” trong mặt nạ thành hình tròn:

Như vậy, ảnh thu được sau khi áp dụng mặt nạ có thể là đa giác, mà cũng có thể là hình tròn tùy theo việc bạn đọc cài đặt điểm “bật” trong mặt nạ. Kỹ thuật này hiện tại có vẻ không thú vị lắm so với việc ta có thể sử dụng ngay phương pháp cắt ảnh, tuy nhiên bạn đọc sẽ quay lại đây khi chúng ta bàn luận tới histograms. Các điểm quan trọng trong mặt nạ giúp việc tính toán vào vùng mà chúng ta chọn lựa dễ dàng hơn rất nhiều ở các bài học tiếp theo.

Một số phương pháp xử lý ảnh cơ bản (Phần 2)

Công nghệ Uncategorized

Qua các bài học trước, bạn đọc hẳn đã nắm được cách thực hiện một số biến đổi cơ bản lên ảnh số. Trong bài học này, chúng ta sẽ cùng nhau tìm hiểu thêm phép toán cộng, trừ trong xử lý ảnh. Nếu bạn đọc còn nhớ, khi làm việc với ảnh số, chúng ta cần lưu ý các giới hạn về hệ màu và loại dữ liệu. Có thể kể đến như ảnh RGB có giá trị các điểm ảnh trong khoảng [0, 255]. Vậy khi ta tăng điểm ảnh có giá trị hiện tại là 250 thêm 10 đơn vị thì điều gì sẽ xảy ra? 

Bằng việc thực hiện tính toán như bình thường 250 + 10 = 260. Tuy nhiên, ảnh RGB được biểu diễn qua 8-bit số nguyên nên 260 là giá trị không hợp lệ. Để có thể giải đáp được trường hợp này, chúng ta sẽ thử nghiệm qua ví dụ sau:

Dòng 1-13 thực hiện các chức năng: khai báo thư viện, định nghĩa tham số, đọc và hiển thị hình ảnh như ở các bài học trước. Từ dòng 15 tới dòng 19, chúng ta sẽ kiểm tra xem khi giá trị tính toán vượt quá ngưỡng định nghĩa của ảnh thì điều gì sẽ xảy ra.

Thử nghiệm đầu tiên với hai hàm cv2.add và cv2.subtract. Như tên gọi của hai hàm này, ta thực hiện cộng và trừ hai mảng với nhau. Với trường hợp phép cộng, chúng ta thực hiện tính tổng hai giá trị 200 và 100, còn trường hợp phép trừ, ta thực tính hiệu 50 – 100. Vậy hai phép toán đơn giản này bạn đọc có thể dễ dàng nhẩm ra kết quả là 300 cho phép cộng, và -50 cho phép trừ. Ta cùng xem kết quả trả về của đoạn mã:

Kết quả trả về khi thực hiện hai hàm cv2.add và cv2.subtract lần lượt là 255 và 0. Như vậy, với giá trị vượt quá ngưỡng cho phép, opencv sẽ trả về kết quả bằng với ngưỡng lớn nhất hoặc nhỏ nhất như định nghĩa kiểu dữ liệu sử dụng. Tuy nhiên, Numpy không xử lý như hai hàm opencv. Ở dòng 18-19, chúng ta sẽ thấy kết quả trả về khi vượt quá giá trị tối đa của kiểu dữ liệu như sau:

Giá trị dự đoán của bạn đọc là 300 do 200 + 100 như tính toán thông thường. Ta có thể thấy rằng 300 – 256 = 44 và 256 – 50 = 206. Chúng ta thấy rằng khi kết quả vượt qua ngưỡng giới hạn thì phần dư ra sẽ được đếm lại từ 0.

Tiếp đó, chúng ta áp dụng thử việc thêm, và lược bớt điểm ảnh:

Dòng 21, ta định nghĩa một mảng Numpy có cùng kích thước với bức ảnh muốn chỉnh sửa. Bạn đọc chú ý rằng, ma trận này phải cùng kiểu dữ liệu với bức ảnh gốc. Ở đây ngoài việc tạo ra một ma trận cùng kích thước ảnh gốc – trong đó mỗi giá trị trong ma trận này đều là 1 do việc khởi tạo np.ones, ta tăng giá trị ma trận khởi tạo này lên 200 lần – mỗi phần tử trong ma trận s1 giờ có giá trị là 200. Sau khi khởi tạo thành công, ta thực hiện phép cộng cv2.add giữa ảnh gốc và ma trận tạo mới. 

Ngay từ bài học đầu tiên, bạn học hẳn đã có thể dự đoán kết quả dòng 21-23 sẽ thu về một bức ảnh sáng hơn ảnh gốc – giá trị gần 255 thì gần màu trắng, giá trị gần 0 thì gần màu đen. Kết quả của đoạn mã thu được như sau:

Chúng ta thấy rằng khi tăng giá trị điểm ảnh lên thì bức ảnh trở nên sáng hơn, ngược lại khi giảm giá trị điểm ảnh thì bức ảnh trở nên tối, đậm hơn. Trong bài học tới, bạn đọc và tôi sẽ cùng nhau tìm hiểu thêm về phép toán nhị phân trong xử lý ảnh.

Một số phương pháp xử lý ảnh cơ bản (phần 1)

Công nghệ

Qua các bài học trước, chúng ta đã nắm được các thao tác xử lý cơ bản với ảnh số và cách tương tác, thay đổi giá trị của từng điểm ảnh. Trong nhóm bài này, bạn đọc và tôi sẽ cùng nhau tìm hiểu thêm một số phương pháp biến đổi ảnh số cơ bản như: phép dịch, phép xoay, thay đổi kích thước, lật ảnh hay cắt ảnh số.

1.Phép dịch

Phương pháp đầu tiên mà chúng ta sẽ tìm hiểu là phép dịch ảnh. Phép dịch cho phép dịch chuyển bức ảnh, hay nói cách khác là dịch chuyển ma trận theo trục tung, và trục hoành. Bằng cách sử dụng phương pháp này, bức ảnh có thể dễ dàng di chuyển lên, xuống, qua trái, qua phải theo cách mà chúng ta mong muốn. Ta sẽ cùng nhau phân tích cách sử dụng dưới đây:

Dòng 1-13, khai báo thư viện sử dụng, và định nghĩa tham số truyền vào và đọc ảnh như ví dụ đã được trình bày trong các bài học trước.

Phép dịch ảnh được thực hiện dòng 15-17. Chúng ta bắt đầu bằng định nghĩa dịch chuyển là s1 – ma trận chứa thông tin về số điểm ảnh ta muốn dịch chuyển qua phải hoặc trái, lên trên hoặc xuống dưới. Thông tin này sau đó sẽ được áp dụng vào bức ảnh cần thực hiện biến đổi.

Ta có thể thấy rằng cấu trúc định nghĩa dịch chuyển là một ma trận gồm 2 thành phần:

[1, 0, tx]: tx là số lượng điểm ảnh ta muốn dịch bức ảnh qua trái hoặc phải. tx < 0 sẽ dịch bức ảnh qua trái và tx > 0 sẽ dịch bức ảnh phải

[0, 1, ty]: ty là số lượng điểm ảnh ta muốn dịch bức ảnh lên trên hoặc xuống dưới, ty < 0 dịch bức ảnh lên trên và ngược lại

Như vậy, chúng ta thấy rằng định nghĩa tx = 25 và ty = 50 sẽ dịch bức ảnh qua 25 điểm ảnh về phía bên phải và dịch bức ảnh xuống 50 điểm ảnh.

Sau khi định nghĩa ma trận dịch chuyển, phép dịch sẽ được chính thức thực hiện ở dòng 16 qua hàm cv2.warpAffine. Tham số đầu tiên hàm này nhận vào là bức ảnh ta muốn biến đổi, sau đó là ma trận dịch được định nghĩa – s1. Cuối cùng là tham số về chiều của bức ảnh đầu vào (số cột và số dòng). Bạn đọc có thể thử nghiệm thêm nhiều cách dịch khác nhau như ví dụ dòng 19-21. Kết quả chúng ta thu được như sau:

2.Phép xoay

Phương pháp thứ hai chúng ta tìm hiểu là phép xoay ảnh. Phương pháp này cho phép ta xoay ảnh theo một góc độ được định nghĩa

Dòng 1-13 định nghĩa và đọc ảnh như ở các ví dụ trước. Để có thể xoay một bức ảnh, chúng ta đặc biệt cần chú ý tìm ra tọa độ tâm mà ta muốn xoay bức ảnh, do đó opencv hỗ trợ người dùng định nghĩa dễ dàng tâm điểm này. Dòng 15-16, ta lấy kích thước bức ảnh và chia đôi để được tọa độ điểm chính giữa của bức ảnh. Thay vì phải định nghĩa ma trận xoay numpy như ở phép dịch, opencv cung cấp hàm cv2.getRotationMatrix2D – nhận 3 tham số đầu vào gồm tọa độ tâm điểm ta muốn xoay hình, sau đó là giá trị góc ta muốn xoay từ tâm và cuối cùng là kích thước bức ảnh.

Như vậy, với tham số thứ hai là 45, ta hiểu rằng bức ảnh ban đầu được xoay theo góc 45 độ và hình ảnh xoay giữ nguyên kích thước ban đầu khi tham số thứ ba là 1.0 và bị chia đôi khi bằng 0.5 hay gấp đôi với giá trị là 2.0. Tuy nhiên việc thay đổi kích thước ảnh sẽ được bàn luận ở phần sau của bài học.

Khi mà ta đã có được ma trận định nghĩa phép xoay, ta thực hiện biến đổi ảnh qua hàm cv2.warpAffine ở dòng 19. Kết quả mà chúng ta thu được như sau:

3.Thay đổi kích thước

Sau phép dịch và phép xoay ảnh, chúng ta sẽ tiếp tục tìm hiểu phương pháp thay đổi kích thước ảnh. Chắc hẳn bạn đọc không hề xa lạ với hàm cv2.resize, tuy nhiên chúng ta sẽ nghiên cứu kĩ hơn về các tham số sử dụng trong hàm qua ví dụ sau:

Dòng 1-13 thực hiện thao tác quen thuộc: khai báo thư viện, định nghĩa tham số, đọc và hiển thị bức ảnh. Phần thú vị bắt đầu ở dòng 15-16, để có thể thay đổi kích thước ảnh số, chúng ta cần chú ý tới tỉ lệ khung hình – mối quan hệ giữa số hàng và số cột của ma trận biểu diễn hình ảnh. Nếu bạn đọc không chú ý tới hai yếu tố này, sai sót trong tỉ lệ khung hình thay đổi kích thước sẽ dẫn đến kết quả ảnh hiển thị không theo ý muốn.

Việc tính toán tỉ lệ khung hình được xử lý tại dòng 15. Ở đây, chúng ta định nghĩa ảnh mới có số cột là 200 điểm ảnh. Để có thể tính tỉ lệ khung hình – số hàng ma trận mới so với hiện tại, ta định nghĩa giá trị r = 200 chia số cột – rs_img.shape[1]. Khi đã có tỉ lệ khung hình, chúng ta tính chiều của bức ảnh sau khi thay đổi kích thước qua dòng 16. Như vậy, ta thu được số cột ở ảnh mới là 200, ta tìm số hàng của ma trận mới bằng cách nhân giá trị hàng ma trận cũ với tỉ lệ r

Bức ảnh được thay đổi kích thước thực hiện ở dòng 18, qua hàm cv2.resize. Tham số đầu tiên là bức ảnh gốc bạn muốn thay đổi kích thước, tham số thứ hai là kích thước ảnh mới và cuối cùng là phương thức interpolation – thuật toán thực hiện thay đổi kích thước ảnh. Bạn đọc có thể thay thế cv2.INTER_AREA bằng một số tùy chọn khác như cv2.INTER_LINEAR, cv2.INTER_CUBIC hay cv2.INTER_NEAREST. Bên cạnh đó, bạn cũng có thể thay đổi kích thước bức ảnh theo tỉ lệ giữa số hàng và số cột ma trận hoặc ngược lại. Kết quả chúng ta thu được sau khi thay đổi kích thước bức ảnh với hai trường hợp: số cột = 200 và số hàng 100

4.Lật ảnh

Nếu bạn đọc thắc mắc làm thế nào để tạo hình ảnh như đổ bóng, hay hình ảnh phản chiếu thì phép lật ảnh sẽ hỗ trợ bạn thực hiện các tác vụ này. Phép dịch ở trên cho phép ta di chuyển toàn bộ bức ảnh theo hệ tọa độ, thì phương pháp lật ảnh mà opencv hỗ trợ giúp ta lật ảnh qua lại quanh trục tọa độ. Chúng ta bắt đầu ngay với ví dụ sau:

Chúng ta sẽ bắt đầu ngay vào với hàm cv2.flip dòng 15, phương thức này nhận vào hai tham số: đầu tiên là bức ảnh ta muốn lật, và thứ hai là flip code sử dụng để quyết định ta sẽ lật bức ảnh theo cách nào.

Ý nghĩa giá trị flip code:

0: lật bức ảnh theo trục tung

1: lật bức ảnh theo trục hoành

-1: lật bức ảnh theo cả hai trục

Đây có lẽ là phương pháp biến đổi cơ bản nhất mà chúng ta tìm hiểu. Sau khi thực thi, chúng ta thu được kết quả sau:

5.Cắt ảnh

Để có thể loại bỏ các thành phần thừa trong một bức ảnh, ta sử dụng phương pháp cắt ảnh. Phương pháp này rất quen thuộc với bạn đọc và đã được đề cập trong bài học trước. Chúng ta thực hiện cắt ảnh thông qua sự hỗ trợ từ thư viện numpy bằng việc khai báo tọa độ vùng mà ta muốn giữ lại

Quá trình cắt ảnh được thực hiện ở dòng 15, chúng ta thực hiện việc định nghĩa tọa hình chữ nhật cắt ảnh từ tọa độ bắt đầu từ (100,10) tới (220,80). Ta cần cung cấp 4 giá trị để có thể thực hiện phương pháp cắt ảnh:

y – bắt đầu: trục tung, y = 10

y – kết thúc: trục tung, y = 80

x – bắt đầu: trục hoành, x = 100

x – kết thúc: trục hoành, x = 220

Như vậy, ta có thể cắt được vùng ảnh chứa đầu của gundam astray red:

Ở bài tiếp theo, chúng ta sẽ cùng nhau tìm hiểu một số phép toán trên ảnh.

Làm quen với Histogram trong OpenCV

Công nghệ

Đến với bài viết này, chúng ta sẽ làm quen với một khái niệm mới là histograms – biểu đồ. Vậy histograms là gì? Đây là một dạng biểu đồ thể hiện tần suất, nó mô tả một cách đơn giản mà không làm mất bất cứ thống kê thông tin nào của dữ liệu. Trong xử lý ảnh, biểu đồ này biểu thị cường độ phân bố điểm ảnh (cho dù là ảnh màu hay ảnh xám). Biểu đồ có thể được biểu diễn dạng đường hoặc dạng cột, nhờ đó mà nó cung cấp hình ảnh trực quan về mức độ phân bố giá trị điểm ảnh. Ngoài ra, histograms còn chứa các thông tin về kiểu phân bố dữ liệu, độ rộng dữ liệu, đánh giá tính đối xứng của dữ liệu và cho thấy dữ liệu nằm ngoài phân bố. Trong phạm vi bài học này, chúng ta sử dụng không gian màu RGB, do đó giá trị điểm ảnh sẽ nằm trong khoảng từ 0 tới 255.

Bằng cách vẽ biểu đồ, ta hãy tưởng tượng trục x như là các ngăn chứa khác nhau. Nếu chúng ta vẽ biểu đồ có 256 ngăn chứa, thì chúng ta đang xếp lần lượt từng giá trị điểm ảnh vào một ngăn tương ứng và trục y sẽ cho ta biết số lần xuất hiện của từng giá trị trong mỗi ngăn xếp. Ngoài ra nếu chúng ta chỉ chia thành 2 ngăn xếp thì các giá trị có thể được xếp vào hai ngăn tương ứng [0,128) hoặc [128,255]. Cuối cùng thì số lượng trong mỗi ngăn xếp sau đó được biểu thị trên trục y. Có thể bạn đọc vẫn đang đặt ra câu hỏi rằng tại sao chúng ta cần nắm được ý nghĩa của biểu đồ trong xử lý ảnh. Khi ta phân tích histograms – biểu đồ phân bố điểm ảnh, ta sẽ có được các thông tin về độ tương phản, độ sáng và cường độ phân bố các giá trị

Chúng ta sẽ cùng nhau bắt tay vào tạo một biểu đồ với bức ảnh yêu thích và phân tích xem có thể thu thập được những thông tin hay ho nào. 

Để có thể tạo một biểu đồ của bức ảnh với opencv, ta sử dụng hàm cv2.calcHist, trong đó:

cv2.calcHist(images, channels, mask, histSize, ranges):

a.images: bức ảnh ta muốn tạo biểu đồ

b.channels: danh sách các chỉ mục tính biểu đồ. Giá trị là 0 với ảnh xám. Với ảnh màu, giá trị là [0,1,2] tương ứng R, G, và B

c.mask: khái niệm mặt nạ bạn đọc đã được tìm hiểu trong bài học trước, khi cung cấp tham số này, biểu đồ sẽ chỉ hiển thị giá trị nằm trong mặt nạ định nghĩa. Nếu không muốn sử dụng mặt nạ thì ta để là None

d.histSize: số lượng ngăn xếp ta muốn sử dụng để tính toán biểu đồ. Tham số này là một list – danh sách, và một cho mỗi kênh màu chúng ta thực hiện tính toán, và không nhất thiết các tham số phải bằng nhau. Ví dụ mình muốn tạo biểu đồ kích thước 32 ngăn xếp cho mỗi kênh màu thì sẽ khai báo là [32,32,32]

e.ranges: tại đây chúng ta sẽ chỉ định phạm vi có thể của điểm ảnh. Thông thường, giá trị này trong khoảng [0,256] cho mỗi kênh màu, tuy nhiên nếu bạn sử dụng hệ màu khác ngoài RGB (như HSV chẳng hạn), thì khoảng giá trị này sẽ có chút khác biệt. 

Sau đây, ta sẽ cùng nhau tìm hiểu cách tạo biểu đồ với ảnh xám và ảnh màu.

1.Tạo biểu đồ ảnh xám

Dòng 1-14, chúng ta thực hiện thao tác tương tự như các bài học trước: khai báo thư viện, định nghĩa tham số, đọc ảnh truyền vào và hiển thị bức ảnh. Tuy nhiên, điểm khác biệt dòng 12, ta thực hiện chuyển đổi bức ảnh truyền vào từ ảnh màu thành ảnh xám, và chúng ta sẽ tìm hiểu thêm một thư viện mới là matplotlib – đây là một thư viện hỗ trợ mạnh trong quá trình vẽ đồ thị. Ở dòng 16, chúng ta bắt tay vào tính biểu đồ qua sử dụng hàm cv2.calcHist. Như bạn đọc có thể thấy, tham số đầu tiên là biến số rs_img chứa bức ảnh xám. Do ảnh xám có duy nhất một kênh màu, do đó tham số thứ hai mà ta truyền vào là [0] kênh màu. Ngoài ra, chúng ta không sử dụng mặt nạ nên tham số tiếp theo truyền vào hàm là None. Tiếp đến là chúng ta sử dụng 256 ngăn chứa – 256 nhóm giá trị và khoảng giá trị từ 0 tới 256 phù hợp.

Cuối cùng, ta gọi plt.plot() để hiển thị biểu đồ và kết quả cuối cùng bạn đọc sẽ tìm thấy phía dưới đây. Biểu đồ cho thấy giá trị điểm ảnh tập trung trong khoảng từ 0 tới 50.

2.Tạo biểu đồ ảnh màu

Ở ví dụ trên, chúng ta đã nắm được cách tạo biểu đồ ảnh xám, bây giờ bạn đọc và tôi sẽ tìm hiểu cách tính phân bố điểm ảnh cho từng kênh màu trong ảnh

Ở đoạn mã nguồn này chúng ta cần để ý những đoạn sau:

Điều đầu tiên khi ta muốn tạo biểu đồ phân bố giá trị điểm ảnh ở ảnh màu chính là phân tách giá trị ảnh màu ra thành 3 kênh màu: b, g và r – dòng 16. Thông thường, chúng ta đọc hệ màu RGB theo thứ tự lần lượt là r,g và b. Tuy nhiên, opencv lưu ảnh ở dạng mảng numpy theo thứ tự ngược lại: BGR – bạn đọc nên chú ý thứ tự này để có thể xử lý chính xác. Tiếp đó, ta tạo biến colors lưu giá trị các màu biểu thị ở dòng 17.  

Dòng 18-21, khởi tạo và hiển thị biểu đồ với chú thích tương ứng.

Tiếp đó, dòng 23, ta thực hiện vòng lặp chạy qua từng kênh màu. Với mỗi kênh màu, chúng ta tính giá trị hiển thị lên biểu đồ theo phân bố giá trị điểm ảnh tương ứng. Kết quả biểu đồ phân bố thu được như sau: 

Như vậy, chúng ta đã có thể tính biểu đồ lần lượt qua từng kênh màu. Bây giờ, chúng ta sẽ chuyển qua biểu đồ đa chiều và xem xét tính toán hai kênh màu một lúc. Ví dụ, bạn đọc có thể có các câu hỏi như là “Có bao nhiêu điểm ảnh có giá trị đỏ là 10 và xanh là 30?”. Bạn đọc theo dõi minh họa sau:

Bạn đọc có thể thấy rằng mã nguồn ví dụ này khá là dài, tuy nhiên đây là do chúng ta đang thực hiện tính toán biểu đồ màu sắc 2D cho mỗi kết hợp của kênh màu RGB: B&R, G&R, G&B. Như vậy, bây giờ chúng ta đang làm việc với biểu đồ đa chiều. Ở ví dụ trước, mình sử dụng 256 nhóm để làm ví dụ. Tuy nhiên, nếu chúng ta sử dụng 256 nhóm để biểu diễn biểu đồ 2 chiều thì chúng ta sẽ thu về một biểu đề có số lượng 256×256=65536 điểm ảnh riêng biệt. Điều này gây lãng phí bộ nhớ và không thực tiễn. Phần lớn các ứng dụng sử dụng trong khoảng 8 tới 64 nhóm để tính biểu đồ đa chiều. Dòng 32-33, mình sử dụng 32 nhóm thay vì 256. Bạn đọc có thể dễ dàng thấy rằng tham số đầu tiên cho hàm cv2.calcHist nhận vào mảng gồm giá trị hai kênh màu là G và B, hai tổ hợp còn lại cách triển khai tương tự. Vậy biểu đồ 2D được opencv xử lý như thế nào? Khá đơn giản, đó chỉ là mảng numpy hai chiều. Do đó, khi ta chọn cách chia thành 32 nhóm, ta thu được biểu đồ 32×32. Cách biểu đồ hiển thị trực quan bạn đọc có thể tham khảo ở kết quả dưới đây. Đầu tiên là biểu đồ gồm hai kênh màu G và B, tiếp đó là G và R, cuối cùng là B và R. Sắc thái xanh lam biểu diễn điểm ảnh có giá trị nhỏ, còn sắc đỏ biểu thị điểm ảnh có giá trị lớn

Cuối cùng, chúng ta tiếp tục xây dựng một biểu đồ 3 chiều kết hợp cả 3 kênh màu RGB:

Đoạn mã khá đơn giản sau khi chúng ta mở rộng mã từ các phần trên. Dòng 58, ta tính biểu đồ 8x8x8 ở mỗi kênh màu.

3.Cân bằng biểu đồ

Cân bằng biểu đồ là phương pháp cải thiện độ tương phản của bức ảnh bằng cách kéo dãn phân bố điểm ảnh. Bạn đọc có thể thấy ở các ví dụ trên, phân bố điểm ảnh không đồng đều là tập trung chủ yếu ở một số đỉnh có giá trị nhất định. Bằng việc kéo dãn phân bố giá trị này, bức ảnh có thể trở nên sáng hơn. Phương pháp này rất hữu ích khi bức ảnh có nền và trung tâm đều sáng hoặc đều tối – điều mà gây ra cách hiệu ứng xấu trong nhiếp ảnh. Ngoài ra, phương pháp này còn được sử dụng rộng rãi với đối tượng là ảnh vệ tinh và ảnh chụp y học. Trước tiên, chúng ta sẽ cùng nhau tham khảo ví dụ sau:

Dòng 1- 13, tương tự các ví dụ trước, nhưng ở dòng 12, chúng ta thực hiện biến đổi ảnh màu đầu vào về ảnh xám. Phương pháp cân bằng biểu đồ được thực hiện ở dòng 15 qua hàm hỗ trợ cv2.equalizeHist từ opencv với tham số nhận vào duy nhất là biến số được định nghĩa chứa ảnh xám. Kết quả đạt được với ảnh gốc chuyển xám ở phía bên trái, và ảnh được áp dụng phương pháp ở bên phải

Sau khi kéo dãn giá trị bằng phương pháp cân bằng đồ thị, bức ảnh trở nên sáng hơn – ảnh phải.

4.Biểu đồ và mặt nạ

Ở bài học trước, mặt nạ có thể được sử dụng để tập trung vào một vùng trên ảnh mà chúng ta quan tâm. Bây giờ, chúng ta sẽ xây dựng một mặt nạ và tính toán biểu đồ cho vùng ảnh áp dụng mặt nạ

 

Dòng 1-4, chúng ta khai báo các thư viện cần sử dụng. Dòng 6, ta định nghĩa hàm plot_histogram nhận vào 3 tham số là img, title và mask, trong đó img: ảnh, title: tên khung và mask: mặt nạ với giá trị mặc định là None. Phần thân hàm chúng ta đơn giản là thực hiện vẽ biểu đồ như các ví dụ trên cho mỗi kênh màu

Dòng 21-29, ta định nghĩa tham số truyền vào, đọc ảnh và hiển thị ảnh gốc. Sau đó, chúng ta gọi hàm plot_histogram để hiển thị biểu đồ của bức ảnh. Kết quả thu được:

Sau đó, ta xây dựng mặt nạ bằng cách định nghĩa ma trận giá trị 0 với numpy có cùng kích thước với bức ảnh xử lý – dòng 32. Sau đó, chúng ta vẽ đa giác với tọa độ bắt đầu là (15,15) tới tọa độ kết thúc là (130, 100) ở dòng 33. Đa giác này sẽ được sử dụng làm mặt nạ, lấy ra giáp vai của gundam. Để có thể biểu diễn và áp dụng mặt nạ này, ta thực hiện phép AND.

Chúng ta thấy rằng, ảnh góc trên cùng bên phải là mặt nạ sử dụng và giáp vai thu được nằm ở phía dưới bên phải. Cuối cùng, chúng ta đánh giá biểu đồ sau khi áp dụng mặt nạ

Bằng cách áp dụng mặt nạ, chúng ta có thể áp dụng tính toán vào vùng mà ta mong muốn trên bức ảnh, ví dụ như chúng ta muốn phân tích phân bố màu sắc trên giáp vai của gundam chẳng hạn. Như vậy, sau bài học này, bạn đọc đã có cái nhìn toàn cảnh về những hỗ trợ biểu đồ mà opencv đem lại. Đây là một chủ đề khó và có ứng dụng rộng rãi. Chúng ta sẽ còn nhắc lại nội dung ở đây trong những bài học tiếp theo.

 

Làm quen với Thresholding trong OpenCV

Công nghệ

Trong bài đọc này, chúng ta sẽ tìm hiểu về ngưỡng ảnh. Thông thường, đây là phương pháp mà chúng ta sẽ sử dụng khi muốn chuyển đổi từ ảnh xám thành ảnh nhị phân – giá trị các điểm ảnh là 0 hoặc 1. Bạn đọc hẳn còn nhớ, ảnh xám bao gồm các điểm ảnh có giá trị trong khoảng từ 0 tới 255, phương pháp xét ngưỡng cơ bản để có thể chuyển đổi qua ảnh nhị phân đó là chúng ta chọn một giá trị điểm ảnh là p, và cài đặt toàn bộ điểm ảnh có giá trị nhỏ hơn p thành giá trị 0, những điểm ảnh còn lại mang giá trị 1. Như vậy, chúng ta đã thu được một bức ảnh nhị phân từ ảnh xám

Ảnh xám

Ảnh nhị phân
Việc chúng ta áp dụng xét ngưỡng trong xử lý ảnh nhằm tập trung vào các đối tượng hoặc vùng ảnh cụ thể mà ta quan tâm. Bạn đọc sẽ thấy rõ ràng hơn qua ví dụ tìm đồng xu trong bức ảnh dưới đây.
1.Phương pháp xét ngưỡng cơ bản
Phương pháp cơ bản đầu tiên mà chúng ta tìm hiểu sẽ khá thủ công, phụ thuộc phần lớn vào bản thân bạn đọc. Trước hết, ta cần định nghĩa giá trị ngưỡng là T. Tất cả điểm ảnh có giá trị nhỏ hơn T được cài đặt giá trị mới là 0, và tất cả điểm ảnh lớn hơn T cài đặt giá trị mới là 255. Bạn đọc cũng có thể cài đặt giá trị ngược lại do ảnh nhị phân chỉ gồm hai giá trị là 0 và 1 như mình đã trình bày trong những bài mở đầu. Ta sẽ cùng nhau xem xét ví dụ sau:

Dòng 1-15, chúng ta thực hiện các thao tác quen thuộc: khai báo thư viện, định nghĩa tham số đầu vào, thay đổi kích thước và hiển thị hình ảnh. Trong đó, dòng 13 thực hiện chuyển đổi ảnh đầu vào hệ màu RGB thành ảnh xám. Tiếp đó ở dòng 14, ta áp dụng kỹ thuật làm mờ Gaussian trong bài học trước giúp loại bỏ một số đường nét từ đồng xu.

 


AnhDemo: Bức ảnh đầu vào sau khi chuyển đổi từ hệ màu RGB thành ảnh xám
Threshold Binary: áp dụng ngưỡng nhị phân cơ bản, đồng xu hiển thị có màu đen và nền trắng
Threshold Binary Inverse: áp dụng nghịch đảo kết quả threshold binary. Đồng xu mang giá trị điểm ảnh ngược lại có màu trắng, nền từ trắng chuyển thành đen
Coins: Áp dụng mặt nạ là kết quả threshold binary inverse trong ảnh xám. Chúng ta thu được ảnh cuối tập trung vào duy nhất các đồng xu.
Sau khi áp dụng kỹ thuật làm mờ ảnh, ta tính toán ngưỡng ảnh qua hàm cv2.threshold tại dòng 17. Hàm này nhận vào 4 tham số: thứ nhất là ảnh xám mà ta muốn áp dụng xét ngưỡng – ta cung cấp ảnh xám đã được xử lý làm mờ cho tham số này. Tiếp đó, chúng ta cung cấp giá trị ngưỡng chọn thủ công T = 155. Tham số thứ ba là ngưỡng tối đa mà ta áp dụng. Tất cả các điểm ảnh có giá trị p lớn hơn T sẽ mang giá trị tham số thứ ba này. Và tất giá trị nhỏ hơn 155 sẽ được cài đặt là 0. Cuối cùng, chúng ta cung cấp phương thức ngưỡng: cv2.THRESH_BINARY để thực hiện thay đổi các giá trị điểm ảnh theo ngưỡng cung cấp từ các tham số phía trước.
Hàm cv2.threshold trả về hai giá trị: T và ảnh đã được biến đổi theo ngưỡng cài đặt. Kết quả thu được như bạn đọc có thể theo dõi ở hình trên cùng phía bên phải: đồng xu có màu đen và nền trắng.
Qua dòng 20, ta áp dụng ngưỡng đảo ngược cho ảnh qua phương thức cv2.THRESH_BINARY_INVERSE và thu được kết quả là đồng xu màu trắng nền đen. Cuối cùng, để có thể thu được kết quả chỉ bao gồm những đồng xu từ bức ảnh ban đầu, ta thực hiện tác vụ ở dòng 23 bằng cách sử dụng cv2.bitwise_and. Ta cung cấp ảnh cần lọc xu cho tham số thứ nhất và mặt nạ sử dụng là kết quả áp dụng ngưỡng đảo ngược. Kết quả cuối cùng ta thu được bức ảnh chỉ gồm giá trị điểm ảnh của các đồng xu. Ứng dụng phương pháp này bạn đọc hẳn không còn xa lạ gì khi xem các streamer xóa nền và chỉ hiển thị khuôn mặt khi tương tác.
2.Phương pháp ngưỡng thích ứng
Một trong những nhược điểm của việc xét ngưỡng cơ bản hẳn bạn đọc có thể dễ dàng nhận thấy chính là việc phải chọn giá trị T một cách thủ công, cảm tính hoặc phải qua nhiều lần cài đặt để tìm ra giá trị phù hợp cho bài toán. Phương pháp thứ hai mà mình giới thiệu không chỉ tìm ra giá trị T mà còn hỗ trợ nhiều cài đặt tinh chỉnh tham số. Áp dụng ngưỡng thích ứng hoạt động trên cơ chế tìm giá trị tối ưu T của các điểm ảnh lân cận.

Từ dòng 1-15, ta thực hiện tương tự phương pháp thứ nhất. Chúng ta áp dụng ngưỡng thích ứng ở dòng 17 qua hàm cv2.adaptiveThreshold với tham số thứ nhất là bức ảnh ta muốn áp dụng ngưỡng, tham số thứ 2 cung cấp giá trị điểm ảnh tối đa áp dụng ngưỡng – 255 như ở ngưỡng cơ bản. Tham số thứ ba mà chúng ta cung cấp là cv2.ADAPTIVE_THRESH_MEAN_C – tính T bằng trung bình giá trị các điểm ảnh lân cận. Tiếp theo là phương thức cài đặt ngưỡng để chuyển đổi ánh xám qua ảnh nhị phân, sau đó, ta cung cấp kích thước vùng xét ngưỡng – giá trị này phải là số lẻ. Ở đây, 11 nghĩa là ta sẽ xét vùng áp dụng ngưỡng có kích thước 11×11 thay vì toàn bộ bức ảnh như phương pháp thứ nhất.Tham số cuối cùng là C – giá trị trừ đi từ giá trị trung bình để điều chỉnh ngưỡng. Kết quả thu được như sau:

Tổng quan, chúng ta thấy rằng ở phương pháp thứ hai, việc lựa chọn ngưỡng trung bình hay ngưỡng theo Gauss thì vẫn yêu cầu một số tham số cuối phụ thuộc vào quá trình thực nghiệm. Tham số quan trọng nhất ở phương pháp này chính là kích thước vùng lân cận xét T và giá trị hiệu chỉnh C. Bằng cách thử nghiệm các tham số này, bạn đọc sẽ tìm ra cách xử lý ảnh phù hợp nhất với từng bài toán.
3.Phương pháp Otsu và Riddler-Calvard
Một phương pháp khác giúp bạn đọc có thể tự động tính toán ngưỡng T chính là phương pháp Otsu. Phương pháp này giả sử tồn tại hai đỉnh trong biểu đồ ảnh xám (bạn đọc hẳn còn nhớ kiến thức trong bài histograms chứ?), khi đó, bằng cách tìm giá trị tối ưu giữa hai đỉnh này, ta thu được ngưỡng T. Chúng ta sẽ tìm hiểu thực nghiệm phương pháp này qua thư viện mahotas

 

Dòng 1-16, ta thực hiện tương tự các ví dụ trên. Để có thể tìm được ngưỡng T phù hợp, chúng ta sử dụng hàm mahotas.thresholding.otsu với tham số truyền vào là bức ảnh cần xử lý, và như vậy ta đã thu được giá trị T = 187


Để có thể thu được kết quả của phương pháp Otsu, ta thực hiện từ dong 21-25. Trước hết, ta tạo một bản sao từ ảnh xám để có thể áp dụng ngưỡng. Dòng 22 thay đổi tất cả giá trị lớn hơn T thành màu trắng, và dòng 23 làm điều ngược lại – thay đổi các giá trị nhỏ hơn T thành màu đen. Cuối cùng, ta áp dụng cv2.bitwise_not để áp dụng ngưỡng vào bức ảnh – bạn đọc tham khảo thêm trong bài viết về phép toán bit, sau đó ta hiển thị kết quả ở dòng 25. Bạn đọc thực hiện tương tự với phương pháp Riddler-Calvard dòng 27-34.

Xác định đường viền trong ảnh số

Công nghệ Uncategorized

Trong bài viết này, chúng ta sẽ cùng nhau sử dụng những điểm cạnh phát hiện được để tìm ra đồng xu trong bức ảnh và đếm chúng. OpenCV cung cấp một phương thức để tìm các đường cong trong ảnh gọi là contours – đường viền. Một đường viền là đường cong các điểm không bao gồm khoảng trống. Các đường viền vô cùng hữu ích trong việc xác định hình dáng vật thể và phân tích ảnh.

Để có thể tìm đường các đường viền trong ảnh, bạn đọc cần nắm được các kỹ thuật xử lý ảnh cơ bản như tách cạnh hoặc áp dụng ngưỡng. Chúng ta sẽ bắt đầu ngay vào bài toán.

Trong 11 dòng đầu tiên, chúng ta thực hiện các thao tác quen thuộc: khai báo thư viện, định nghĩa tham số đầu vào và đọc ảnh.

Như đã trình bày trong bài học trước, để có thể tách cạnh, trước hết, ta chuyển đổi ảnh từ hệ màu RGB thành ảnh xám – dòng 13, sau đó áp dụng kỹ thuật làm mờ Gaussian để lọc nhiễu – dòng 14. Trong ví dụ này, ta sử dụng bộ lọc lớn hơn là 15×15. Tiếp đó, ta tách được cạnh bằng cách áp dụng Canny ở dòng 17.

Sau khi thu được các cạnh của đồng xu, ta thực hiện tìm đường viền qua hàm cv2.findContours – dòng 20. Hàm này trả về 2 giá trị ở phiên bản OpenCV 2.4.x gồm có các đường viền và thứ tự các đường viền trong khi ở phiên bản OpenCV 3.0, hàm này trả về 3 giá trị gồm có ảnh sau khi áp dụng phát hiện đường viền, đường viền và thứ tự của chúng. Quay lại với hàm cv2.findContours, tham số đầu tiên là ảnh được tách cạnh, tiếp đó là loại đường viền mà ta muốn thu về: cv2.RETR_EXTERNAL – thu về đường viền ngoài cùng. Ngoài ra, bạn đọc có thể thử nghiệm thêm một số cài đặt khác như cv2.RETR_COMP và cv2.RETR_TREE. Tham số cuối cùng là ước tính đường viền, trong đó cv2.CHAIN_APPROX_SIMPLE nén các phân đoạn ngang, dọc, chéo vào các điểm cuối. Điều này làm quá trình tính toán nhanh hơn và giảm khối lượng bộ nhớ phải sử dụng. Nếu muốn thu về toàn bộ các điểm tạo nên đường viền mà không nén, bạn đọc sử dụng cv2.CHAIN_APPROX_NONE để so sánh với cấu hình trên. 

Như vậy, đường viền thu được nằm trong biến số cnts ở dạng list. Bạn đọc có thể đếm số đường viền thu được bằng hàm len() – 22. Sau khi thực thi đoạn mã, mình thu được kết quả đếm được 8 đồng xu xuất hiện trong ảnh.

Chúng ta thực hiện vẽ đường viền qua hàm cv2.drawContours. Tham số đầu tiên là bức ảnh ta muốn vẽ – dòng 25, tiếp đó là danh sách đường viền. Tham số thứ 3 là thứ tự đường viền, với giá trị là -1, ta thực hiện vẽ toàn bộ các đường viền có trong danh sách. Tuy nhiên, bạn đọc có thể thay đổi là giá trị này theo thứ tự đường viền bạn muốn vẽ thay vì tất cả. Cuối cùng là hai tham số về màu sắc sử dụng và độ dày của viền vẽ.

Vậy làm thế nào để chúng ta có thể trích xuất từng đồng xu trong bức ảnh kia?

Bằng cách xử lý từng phần tử trong danh sách đường viền thu được, chúng ta có thể trả lời câu hỏi trên. Dòng 28 bắt đầu vòng lặp vào danh sách đường viền. Hàm cv2.boundingRect để cắt tọa độ đồng xu xuất hiện trong ảnh và trả về tọa độ x,y bắt đầu đa giác, tiếp đó là chiều rộng và chiều cao đường viền. Các thao tác vẽ hình còn lại bạn đọc có thể tham khảo trong những bài hướng dẫn đầu tiên. Cuối cùng, chúng ta hiển thị được lần lượt các đồng xu xuất hiện trong hình

Như vậy, sau phần đầu tiên của “Thị giác máy tính toàn tập”, bạn đọc đã tìm hiểu rất nhiều phương pháp xử lý ảnh cơ bản như phép dịch, phép xoay, thay đổi kích thước hay cắt ảnh bằng cách lập trình trực tiếp với Python và OpenCV. Bên cạnh đó, chúng ta cũng cùng nhau đi qua các khái niệm và ứng dụng đồ thị phân bố điểm ảnh cũng như các phương pháp xét ngưỡng hay làm mờ ảnh. Cuối cùng, bạn đọc đã có thể áp dụng tất cả các kiến thức đó trong việc tìm xác định và tìm số đồng xu xuất hiện trong ảnh. Ở những khóa học tiếp theo, chúng ta sẽ tìm hiểu thêm về ứng dụng học sâu trong thị giác máy tính cùng một số dự án thú vị. Nếu bạn đọc muốn đi sâu hơn vào mảng này, chúng ta sẽ gặp lại nhau trong phần toán học thị giác máy tính.

Phương pháp làm mờ, làm mịn ảnh số

Công nghệ

Bạn đọc hẳn không xa lạ gì với ảnh mờ – hiện tượng máy ảnh lấy hình mất nét. Trong thực tế, điều này có nghĩa là mỗi điểm ảnh trong bức ảnh bị trộn lẫn với các giá trị ảnh xung quanh nó, tạo nên một hỗn hợp các điểm ảnh – ảnh mờ mà ta quan sát được. Mặc dù đây là hiện tượng không hề mong muốn xuất hiện trong nhiếp ảnh, kỹ thuật làm mờ ảnh lại vô cùng hữu ích trong việc thực hiện các tác vụ xử lý ảnh. Việc làm mờ, làm mịn ảnh hỗ trợ rất nhiều bài toán phát hiện cạnh hay đánh giá ngưỡng giá trị. Để có thể tìm hiểu kỹ hơn về các kỹ thuật làm mờ ảnh, ta sẽ bắt đầu với ví dụ sau

Trước khi đi vào kỹ thuật làm mờ ảnh, chúng ta cần khai báo thư viện, định nghĩa tham số đầu vào qua dòng 1-9. Sau đó, ta đọc và hiển thị bức ảnh cần làm mờ ở dòng 11-13. Sau khi bức ảnh hiện lên, chúng ta bắt đầu tìm hiểu các kỹ thuật làm mờ ảnh

1.Kỹ thuật tính trung bình (averaging)
Kỹ thuật đầu tiên chúng ta tìm hiểu là kỹ thuật lấy trung bình. Như tên gọi của nó, ban đầu bạn đọc sẽ định nghĩa một cửa sổ trượt kích thước kxk, trong đó k luôn là một số lẻ. Cửa sổ này trượt từ trái qua phải và từ trên xuống dưới. Điểm ảnh ở trung tâm cửa sổ này được cài đặt là giá trị trung bình tất cả các điểm ảnh bao quanh nó. Cửa sổ trượt này được gọi là “convolution kernel” hay ngắn gọn là “kernel”. Như chúng ta có thể thấy, kích thước cửa sổ càng tăng thì ảnh càng trở nên mờ

 

Để có thể làm mờ bức ảnh, ta sử dụng hàm cv2.blur. Hàm này nhận vào hai tham số: bức ảnh chúng ta muốn làm mờ và kích thước cửa sổ trượt. Ở dòng 16-18, chúng ta làm mờ ảnh với kích thước kernel tăng dần. Bạn đọc có thể quan sát kết quả trên, với cửa sổ trượt có kích thước lớn, ảnh trở nên mờ hơn. Bên cạnh đó, để biểu diễn 3 ảnh cạnh nhau, ta sử dụng np.hstack thay vì cv2.imshow từng ảnh.
2.Kỹ thuật Gaussian
Kỹ thuật làm mờ ảnh thứ hai mà chúng ta tìm hiểu là kỹ thuật làm mờ Gaussian. Kỹ thuật này có nhiều điểm tương đồng với kỹ thuật thứ nhất, tuy nhiên, thay vì sử dụng tính trung bình đơn giản, phương pháp này sử dụng tính trung bình có đánh trọng số, trong đó, điểm ảnh gần trung tâm thì có trọng số lớn hơn phần còn lại. Kết quả cuối cùng ảnh bị mờ ít hơn phương pháp trung bình, và mờ tự nhiên hơn.

Đoạn mã làm mờ Gaussian có cú pháp gần tương tự phương pháp lấy trung bình

Dòng 23-25, chúng ta thực hiện làm mờ ảnh qua hàm cv2.GaussianBlur. Tham số truyền vào đầu tiên là ảnh ta muốn làm mờ, tham số thứ 2 là kích thước cửa sổ trượt. Ở tham số cuối cùng là giá trị độ lệch chuẩn theo trục hoành. Tuy nhiên bằng cài đặt giá trị cuối là 0, ta cho opencv biết rằng phần này sẽ được tính toán tự động dựa theo kích thước cửa sổ trượt.
3.Kỹ thuật trung vị – median
Kỹ thuật median vô cùng hiệu quả trong xử lý ảnh chụp bị sạn. Tương tự như kỹ thuật tính trung bình, ta thay đổi bằng tính trung vị với giá trị trung tâm cửa sổ trượt. Tính trung vị hiệu quả hơn trong xử lý ảnh sạn, nhiễu do mỗi điểm ảnh trung tâm luôn được thay thế bằng cường độ điểm ảnh tồn tại trong ảnh. Do đó, tạo ra phân bố đều các điểm ảnh khiến ảnh trở nên mịn hơn. Nếu như hai kỹ thuật đầu tiên tính ra giá trị trung bình có thể không nằm trong các giá trị điểm ảnh liền kề, thì khi tính trung vị, ta sẽ thu được kết quả tồn tại trong các điểm ảnh lân cận. Chúng ta có thể thực hiện kỹ thuật làm mờ trung vị như sau:

 

So với tính trung bình, cách tính trung vị sẽ thực hiện như sau:

 


Cho mảng {1,3,4,6,7} do 4 nằm giữa nên trung vị là 4. Với mảng chẵn phần tử {2,4,5,6,7,8} có 5,6 đứng giữa nên trung vị là (5+6)/2 = 5.5
Dòng 30-32 gọi hàm cv2.medianBlur, trong đó hàm này nhận hai tham số gồm ảnh cần làm mờ và kích thước cửa sổ trượt. Kết quả thu được như sau:

Ở phương pháp này, bạn đọc dễ dàng nhận thấy điểm khác biệt lớn với hai phương pháp trước đó. Với kích thước cửa sổ trượt càng tăng, kỹ thuật trung vị không còn bị mờ do chuyển động, mà nhiễu bị loại bỏ, các đường sắc nét viền giáp trở nên mịn hơn.
4.Kỹ thuật làm mờ song phương – bilateral


Kỹ thuật cuối cùng mà chúng ta tìm hiểu trong bài này là bilateral – kỹ thuật làm mờ song phương. Mục đích chính của các kỹ thuật làm mờ chính là giảm nhiễu cho ảnh, tuy nhiên quá trình làm mờ này sẽ gây ra hiện tượng mất góc cạnh trên ảnh. Phương pháp làm mờ song phương nhờ áp dụng hai hàm Gauss nên vừa có thể giảm nhiễu mà vẫn giữ được các đường nét của ảnh. Ở hàm Gauss thứ nhất chỉ bao gồm các điểm ảnh xuất hiện gần nhau theo tọa độ (x,y) trong anh. Hàm Gauss thứ hai sau đó mô hình hóa phân bố điểm ảnh lân cận, đảm bảo rằng chỉ có những điểm ảnh tương tự mới được đưa vào tính toán làm mờ. Nhìn chung, phương pháp này đảm bảo đường nét của ảnh đồng thời giảm nhiễu. Tuy nhiên, nhược điểm của nó là chậm hơn đáng kể so với ba phương pháp trên. Bạn đọc có thể hình dung phương pháp này chúng ta gặp thường xuyên trong các ứng dụng làm đẹp: xóa mụn, làm mịn da.

Chúng ta sử dụng phương pháp bilateral bằng cách gọi hàm cv2.bilateralFilter ở dòng 37-39. Tham số đầu tiên là bức ảnh chúng ta muốn làm mờ. Tiếp đó, ta cần xác định đường kính vùng điểm ảnh lân cận. Hai tham số còn lại là giá trị màu và không gian xác định ảnh hưởng của các điểm ảnh so với trung tâm. Kết quả thu được là bức ảnh giảm nhiễu nhưng vẫn giữ được các đường nét và không có hiện tượng mờ do chuyển động.

 

 

 

 

 

Diễn tập thực chiến An toàn thông tin ngành hàng không – Ứng cứu sự cố mã độc

VSEC - BLOG Sự kiện

Ngày 25 -26/12/2023 vừa qua, Trung tâm thông báo tin tức hàng không trực thuộc Tổng công ty Quản lý bay Việt Nam, phối hợp cùng Công ty Cổ phần An ninh mạng Việt Nam (VSEC) đã tổ chức thành công chương trình Diễn tập thực chiến ứng cứu sự cố mã độc năm 2023 với sự tham gia của 40 cán bộ chuyên trách an toàn thông tin, CNTT đến từ các đơn vị của Tổng công ty Quản lý bay Việt Nam (QLBVN)

Chương trình Diễn tập thực chiến diễn ra thành công với sự tham gia của 40 cán bộ chuyên trách ATTT, CNTT

Đây là cuộc diễn tập thực chiến nhằm nâng cao năng lực phối hợp, triển khai ứng phó các đợt xâm nhập với đa dạng chiến lược và kỹ thuật tấn công của các đơn vị thông qua diễn tập tình huống, năng lực tấn công và xử lý sự cố, đảm bảo tuân thủ đúng các quy định hiện hành của Nhà nước và Tổng Công ty QLBVN theo quyết định số 5211/QĐ-QLB về Quy trình ứng phó sự cố an toàn thông tin đã được ban hành ngày 23/11/2020. Đối tượng diễn tập là hệ thống AIS.

Hoạt động diễn tập thực chiến lần này đã đặt hệ thống thông tin, cán bộ chịu trách nhiệm bảo đảm ATTT dưới trạng thái sẵn sàng ứng phó các đợt xâm nhập với đa dạng chiến lược và kỹ thuật tấn công. Tại buổi diễn tập, các thành viên tham dự được chia thành 4 đội và được chuyên gia của Công ty Cổ phần An ninh mạng Việt Nam hướng dẫn cách thức tham gia diễn tập. Tình huống được đưa ra là hệ thống AIS của TTTBTTHK bị nhiễm mã độc. Các đội ứng phó sự cố sẽ thực hiện điều tra và xử lý sự cố theo đúng quy trình.

Ông Hồ Sỹ Tùng – Phó TGĐ Tổng công ty Quản lý bay Việt Nam phát biểu chỉ đạo

Phát biểu chỉ đạo tại chương trình, ông Hồ Sỹ Tùng – Phó TGĐ Tổng công ty Quản lý bay Việt Nam đã nhấn mạnh sự cấp thiết của vấn đề đảm bảo An toàn thông tin, nâng cao nhận thức của CBNV về ATTT.. Ông cho biết: “ATTT hàng không liên quan cả đến an toàn không lưu, an toàn bầu trời, và ảnh hưởng trực tiếp tới tính mạng của hành khách trên tàu bay. Chính vì thế, việc tổ chức khai thác và đảm bảo ATTT cho các hệ thống thiết bị bảo đảm hoạt động bay và ATTT trong lĩnh vực quản lý bay đang được Tổng công ty rất quan tâm, đặc biệt là nguồn nhân lực chuyên trách ATTT”. 

Ông Trần Thanh Long – Tổng giám đốc Công ty Cổ phần An ninh mạng Việt Nam

Ông Trần Thanh Long – Tổng giám đốc Công ty Cổ phần An ninh mạng Việt Nam hi vọng, thông qua cuộc diễn tập thực chiến lần này, các cán bộ chuyên trách ATTT của Trung tâm thông báo tin tức hàng không cũng như các đơn vị trực thuộc Tổng Công ty Quản lý bay Việt Nam sẽ nắm bắt các tình huống sát với thực tế, giúp cải thiện, tăng khả năng phản ứng nhanh, xử lý kịp thời khi có tấn công xảy ra.

Kết thúc diễn tập, Ban tổ chức đã trao giải Nhất, Nhì, Ba và Khuyến khích cùng các phần quà lưu niệm cho các đội tham gia thi.

Theo ông Nguyễn Văn Toàn – Trưởng phòng bảo đảm kỹ thuật Trung tâm thông báo tin tức hàng không đánh giá: “Thông qua diễn tập thực chiến, các cán bộ quản trị, cán bộ giám sát, ứng cứu sự cố an toàn thông tin đã có cơ hội nhìn nhận, học hỏi, áp dụng các kiến thức, kỹ năng vào thực tiễn “chiến trường” ATTT mạng. Từ đó đưa ra các định hướng về việc hoàn thiện kỹ năng, chuẩn hóa quy trình, cải tiến công nghệ nhằm đáp ứng khả năng ứng cứu, xử lý những thách thức ngày càng gia tăng.

Ông Nguyễn Văn Toàn – Trưởng phòng bảo đảm kỹ thuật Trung tâm thông báo tin tức hàng không chia sẻ

CSTV Capture The Flag 2023 (CTF) – Cuộc thi uy tín nhất để tìm kiếm các Pentester tương lai

Sự kiện

(CTF) Nằm trong khuôn khổ TECHFEST 2023, Làng Công nghệ An toàn an ninh mạng do Công ty Cổ phần An ninh mạng Việt Nam là trưởng làng, đã phối hợp cùng các đơn vị tổ chức cuộc thi “CSTV Capture the Flag 2023” – Tìm kiếm Penetration-tester tương lai dành cho Sinh viên ATTT tại Việt Nam. Cuộc thi CTF này không chỉ là sân chơi kiến thức cho các bạn sinh viên, mà còn là nơi để kết nối những bạn có đam mê An toàn thông tin tới các đơn vị uy tín trong ngành, giúp các bạn có cơ hội được học tập, làm việc và phát triển bản thân hơn.

 

Cuộc Thi CTF Là Gì?

Capture The Flag (gọi tắt là CTF)là một dạng cuộc thi kiến thức chuyên sâu về Bảo mật thông tin được tổ chức theo mô hình thi đấu theo cá nhân hoặc theo đội, thử thách người chơi tìm ra lời giải cho một vấn đề nào đó trong An ninh mạng.  Trong không gian ảo, các đội tham gia sẽ đối mặt với nhiệm vụ thách thức nhằm kiểm tra và cải thiện khả năng bảo mật thông tin. CTF có thể chơi dưới hình thức thi đấu tìm ra Flag (hay mật mã) giấu bên trong server, hoặc phía sau một trang web. Mỗi Flag tương ứng với số điểm, đội nào tìm ra Flag nhanh hơn, đạt nhiều điểm hơn sẽ giành chiến thắng vòng thi. Trong cuộc thi CTF thường cập nhật các thông tin về lỗ hổng bảo mật, các kỹ thuật mới trong hacking và security. Do đó, qua mỗi lần thi CTF người chơi học hỏi, cập nhật kiến thức security và hacking, giao lưu, chia sẻ qua các bài write-up (các bài giải) với mọi người, rèn luyện khả năng tư duy, giải quyết vấn đề.

 

CSTV Capture The Flag 2023 mang lại gì cho người tham gia ?

CTF hấp dẫn và thu hút giới hacker, người làm bảo mật bởi lẽ các cuộc thi này phản ánh rất chân thật công việc hàng ngày và đòi hỏi người chơi phải có các kỹ năng của một hacker, người làm về bảo mật thực thụ. Muốn chiến thắng ở một cuộc thi CTF, người chơi không chỉ phải nhuần nhuyễn các kỹ năng phát hiện và khai thác lỗ hổng bảo mật, mà còn phải thật sự lành nghề trong việc bảo vệ sự an toàn và duy trì tính liên tục của hệ thống mạng trước các đợt tấn công dồn dập từ bên ngoài.

Có thể nói qua một số lợi ích, tác dụng khi tham gia các cuộc thi CTF đối với những người tham gia như:

  • Được học hỏi các kiến thức cần thiết, cập nhật về security và hacking.
  • Đưa những kiến thức chúng ta được học lý thuyết (ở trường, sách vở, báo chí, hội thảo…) ra với thực tế để hiểu đúng bản chất của vấn đề như: (hiểu cách thức reverse engineering một phần mềm, tại sao các phần mềm có thể bị crack; tại sao có thể xâm nhập vào một máy tính; các kỹ thuật khai thác ứng dụng web; Mật mã – mã hóa được áp dụng như thế nào trong thực tế; forensic – điều tra phần tích truy dấu vết được thực hiện như thế nào…)
  • Các bài CTF đòi hỏi người chơi cần có rất nhiều kiến thức sâu về không chỉ security mà còn kỹ năng lập trình, mạng,…nên đây là cơ hội giúp chúng ta củng cố, nâng cao các kỹ năng đang có và bổ sung các kỹ năng mới.
  • Các cuộc thi CTF thường cập nhật các thông tin về lỗ hổng bảo mật, các kỹ thuật mới trong hacking và security. Tham gia làm các bài thi là cách giúp chúng ta nắm được các vấn đề đó một cách cụ thể, đúng bản chất…
  • Qua mỗi lần thi CTF người chơi có thể biết được các kiến thức mình đang còn thiếu, cần bổ sung học hỏi thêm…
  • Giao lưu, chia sẻ qua các bài write-up (các bài giải) với mọi người đồng thời tham khảo các write-up của các người chơi khác để học hỏi…
  • Rèn luyện tính sáng tạo, tăng cường khả năng tư duy, giải quyết vấn đề

 

Vậy, làm thế nào để tham dự CSTV Capture The Flag 2023?

Cuộc thi CSTV CTF của Làng Công Nghệ An toàn an ninh mạng tổ chức hướng đến đối tượng chính là các bạn sinh viên đam mê và đang theo đuổi ngành Công Nghệ Thông Tin và An Ninh Thông Tin hiện đang theo học tại các trường đại học, cao đẳng trên toàn quốc. Đây là cơ hội để họ không chỉ học hỏi từ những chuyên gia hàng đầu trong ngành mà còn thể hiện tài năng của mình trong môi trường cạnh tranh lành mạnh và hỗ trợ.

  • Thời gian: 08h00 – 17h30, thứ bảy ngày 06/01/2024
  • Phạm vi: Toàn quốc (Online)
  • Hình thức: Thi CTF theo đội (mỗi đội từ 3-5 thành viên)
  • Chi tiết về cuộc thi: Truy cập trang sự kiện chính thức tại ĐÂY
  • Cách thức đăng ký: Vui lòng đăng ký tại Link
  • Agenda chương trình:
    Start End Duration Description Note
    8:30:00 AM 9:00:00 AM 0:30:00 Khai mạc
    Giới thiệu hội đồng BGK
    Công thể thể lệ
    Công bố giải thưởng
    Zoom
    9:00:00 AM 9:30:00 AM 0:30:00 Ổn định kết nối
    Hỗ trợ giải đáp thắc mắc (nếu có)
    9:30:00 AM 4:30:00 PM 7:00:00 Thi CTFd
    4:30:00 PM 5:00:00 PM 0:30:00 Kết thúc cuộc thi
    BGK tổng hợp kết quả
    5:00:00 PM 5:15:00 PM 0:15:00 Công bố kết quả chung cuộc
    Giải đáp thắc mắc
    5:15:00 PM 5:30:00 PM 0:15:00 Đại diện trưởng làng chúc mừng đội thi và cảm ơn các thí sinh đã tham gia
    Total 9:00 x x

Giải thưởng của CSTV CTF hấp dẫn như thế nào?

Khi đăng ký tham gia cuộc thi, các bạn sẽ nhận được quà tặng từ Ban tổ chức.

Cơ cấu giải thưởng của cuộc thi, bao gồm

  • 01 giải Nhất: trị giá 10 triệu đồng, và giấy chứng nhận
  • 01 giải Nhì: trị giá 5 triệu đồng, và giấy chứng nhận
  • 02 giải Ba: trị giá 2 triệu đồng, và giấy chứng nhận

Ngoài ra, các bạn còn có cơ hội được thực tập và làm việc chính thức tại các đơn vị như VSEC, Nessar,… Hãy nhanh tay “gom” đồng đội để cùng chinh phục “CSTV Capture the Flag 2023 – Gõ cửa An ninh mạng” ngay thôi nào!!!

VSEC chính thức trở thành đối tác chiến lược của SPLUNK

VSEC - BLOG Nổi bật Thông cáo - Tin tức

Một hành trình đáng tự hào của VSEC khi được SPLUNK – đơn vị nằm trong TOP 3 Vendor cung cấp giải pháp SIEM trên thế giới – công bố là một trong những đối tác chiến lược của mình. VSEC không chỉ là đối tác bán hàng (Sell Motion) mà còn là 1 trong 5 đối tác cung cấp dịch vụ (Manage Motion) của Splunk tại Việt Nam.

Đây không chỉ là một bước tiến quan trọng trong sự phát triển của Công ty Cổ phần An ninh mạng Việt Nam mà còn là một cơ hội mới để VSEC nâng cao khả năng phân tích dữ liệu và giám sát an toàn thông tin của mình. Sự kết hợp giữa VSEC và SPLUNK hứa hẹn mang lại những giải pháp tối ưu và hiệu quả cho khách hàng và cộng đồng. 

Tuy nhiên, không có thành công nào là trải sẵn hoa hồng, “đỉnh núi” SPLUNK này cũng vậy, không hề dễ dàng chinh phục. SPLUNK đã đưa ra rất nhiều tiêu chí cực kỳ khắt khe như: phải hoàn thành các khóa học của SPLUNK dưới sự giám sát chặt chẽ bằng công nghệ cao của họ. Không chỉ vậy, việc học này sẽ phải  được duy trì trong các năm tiếp theo. Bên cạnh đó, để có thể gia nhập vào mạng lưới partner của SPLUNK, các đơn vị cũng cần phải đạt được các chứng chỉ bắt buộc mà SPLUNK yêu cầu. Các chứng chỉ này đều rất khó, đòi hỏi những kỹ sư phải có trình độ chuyên môn cao thì mới học và thi được các chứng chỉ này. 

Trải qua 2 tháng liên tục vừa học vừa thi và hoàn tất các thủ tục để đăng ký, cuối cùng VSEC đã chính thức góp mặt trong mạng lưới partner của SPLUNK. Trao đổi với anh Lê Đức Hợp – Giám đốc Kinh doanh khu vực phía Bắc của VSEC, anh cho biết về sự kỳ vọng của SPLUNK đối với VSEC là rất lớn. Đội ngũ cần có sự chuyên môn hóa hơn với từng bộ phận. Các chuyên viên phát triển thị trường cần có có insight về thị trường, có tập khách hàng lớn, nhất là các khách hàng có độ trưởng thành cao về ATTT; có khả năng tư vấn, thuyết phục khách hàng ứng dụng các giải pháp  của SPLUNK nhằm giúp khách hàng giải quyết được các bài toán phức tạp. Riêng đối với đội ngũ kỹ thuật sẽ phải thành thạo các giải pháp công nghệ của Splunk để cung cấp dịch vụ chất lượng cao tới khách hàng. “Sản phẩm và giải pháp của SPLUNK là sản phẩm giải pháp phức tạp, hướng tới khách hàng có độ trưởng thành cao về Công nghệ thông tin và An Toàn thông tin, vì vậy họ cần những đối tác có khả năng tư vấn, gợi mở yêu cầu và thuyết phục được khách hàng” – anh Hợp cho biết thêm.

Ngay trong tuần đầu tiên của tháng 11, SPLUNK đã sang thăm và có buổi làm việc với VSEC. Hai bên đã cùng trao đổi về các dự án hiện đang trong giai đoạn tư vấn / POC giải pháp của SPLUNK cùng dịch vụ giám sát của VSEC tới khách hàng. Đây là bước đầu trong mục tiêu trở thành Elite Tier Partner – đối tác cấp cao nhất của SPLUNK trong tương lai gần. Với kinh nghiệm hoạt động 20 năm trong lĩnh vực ATTT, sở hữu SOC đạt tiêu chuẩn CREST, VSEC hoàn toàn thấu hiểu insight của khách hàng tại thị trường Việt Nam. Đây chính là “điểm sáng” chứng minh cho các đối tác nước ngoài  rằng VSEC hoàn toàn có thể làm chủ các công nghệ khó trên thế giới. Mặc dù hành trình trở thành đối tác của SPLUNK còn gặp rất nhiều trở ngại bởi sự khác biệt về ngôn ngữ, vấn đề pháp lý và phong cách làm việc… nhưng đây chính là cột mốc quan trọng  nữa trong hành trình phát triển của VSEC 2023, hướng tới mục tiêu mang lại giá trị thực sự thông qua những dịch vụ đẳng cấp quốc tế cho khách hàng vào năm 2024.