Mức xám của ảnh là gì

     
Giới thiệu và chi tiết các thuật toán Grayscale, ảnh nhị phân và một số thuật toán giúp biến đổi một ảnh xám thành ảnh nhị phân (Adaptive threshold).

Bạn đang xem: Mức xám của ảnh là gì


Giới thiệu

OpenCV (Open Computer Vision) là 1 thư viện mã nguồn mở chuyên dùng để xử lý các vấn đề liên quan đến thị giác máy tính. Nhờ 1 hệ thống các giải thuật chuyên biệt, tối ưu cho việc xử lý thị giác máy tính, vì vậy tính ứng dụng của OpenCV là rất lớn.Xử lý ảnh là quá trình xử lý, thao tác hình ảnh để có 1 hình ảnh khác phù hợp với nhu cầu của người dùng, ...


Bài viết giới thiệu khái niệm và kỹ thuật ảnh xám (Grayscale) và ảnh nhị phân và nhị phân hóa (Adaptive Threshold).

GrayScale là gì?

Là 1 hệ thống màu cómô hình màu đơn giản nhất với 256 cấp độ xám biến thiên từ màu đenđến màu trắng.Kết quả được xuất ra sẽ có màu trắng đen.Đượcsử dụng cả trong công nghiệp in lẫn dùng trong việc thể hiện ảnh lên các thiết bị số.Ảnh xám (Gray image)hay còn gọi là ảnh đơn sắc (Monochromatic), mỗi giá trị điểm ảnh (Pixel) trong ma trận điểm ảnh mang giá trị từ 0 đến 255.Trong không gian màu RGB, để có 1 ảnh xám cần có phải có giá trị kênh màu Red(x, y) = Green(x, y) = Blue(x, y) (với x, y lần lượt là tọa độ của điểm ảnh).
*

Chuyển đổi hệ thống màuRGB sang Grayscale

Ảnh là tập hợp của 1 ma trận điểm ảnh (pixel), mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các kênh màu khác nhau. Việc chuyển đổi giữa các hệ màu thông thường được thực hiện thông qua các phép biến đổi ma trận.

Bài viết sẽ giới thiệu cách chuyển đổi từ ảnh 24 bits RGB sang ảnh 8 bits Grayscale.

Công thức

Công thức tính cường độ sáng tại 1 điểm ảnh từ ảnh RGB:

I(x, y) = 0.3086 * Red(x, y) + 0.6094 * Green(x, y) + 0.0820 * Blue(x, y)I(x, y) = 0.299 * Red(x, y) + 0.587 * Green(x, y) + 0.114 * Blue(x, y)

Hoặc

I(x, y) = ( 2 * Red(x, y) + 5 * Green(x, y) + 1 * Blue(x, y) ) / 8

Phân tích

I(x, y): cường độ sáng tại điểm ảnh (x, y) của ảnh xám.Red(x, y): giá trị của kênh màu Red (Đỏ) tại điểm ảnh (x, y) của ảnh màu (RGB).Green(x, y): giá trị của kênh màu Green (Xanh lá cây) tại điểm ảnh (x, y) của ảnh màu (RGB).Blue(x, y): giá trị của kênh màu Blue (Xanh lơ) tại điểm ảnh (x, y) của ảnh màu (RGB).

Chú ý


Các phép toán trong số nguyên (Int)nhanh hơn rất nhiều trong số thực(Float).Trong OpenCV, hệ thống màu có thứ tự các kênh màu là Blue-Green-Red.Các thông số dùng để tính toán cường độ sáng cho ảnh xám như: 0.3086, 0.6094, 0.0820,... được coi là những con số đẹp do người ta nghiên cứu ra. Các con số này có thể thay đổi. Có thể chọn 1 giá trị 1 kênh màu hoặc chia trung bình cộng của 3 kênh màu để tìm cường độ sáng tại 1 điểm ảnh (Pixel).

Chuyển đổi ảnh xám trong OpenCV

Phương thức cvtColor

Trong OpenCV, để chuyển 1 tấm ảnh có hệ màu RGB sang Grayscale, hay thậm chí là các không gian màu qua lại với nhau nhờ phương thức cvtColor()(Convert color).

cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code)

Phân tích

src: Là hình ảnh gốc (Trong bài viết này là ảnh màu).dst: Là ảnh thu được (Trong bài viết này là ảnh xám).code: Là mã chuyển màu. Ví dụ: code = CV_BGR2GRAY là chuyển đổi ảnh màu thành ảnh xám,...Code minh hoạ phương thức cvtColor trong OpenCV// www.stdio.vn// www.stdio.vn/users/index/11/truong-dat#include #include "opencv2/core/core.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;int main(){// Read imageMat image = imread("stdio.png", CV_LOAD_IMAGE_COLOR);Mat imageGrayscale;// Check for validif (!image.data){printf("Could not open or find the image\n");return -1;}cvtColor(image, imageGrayscale, CV_BGR2GRAY);// Create and show image in windowimshow("STDIO OpenCV Sample", imageGrayscale);// Wait input and exitwaitKey(0);return 0;}
*

Ảnh nhị phân

Là ảnh mà giá trị của các điểm ảnh chỉ được biểu diễn bằng hai giá trị là 0 (Đen) và 255 (Trắng) (Tương ứng với 0 và 1, nhưng để nguyên giá trị 0 và 255 để có thể hiểu hơn trong việc tính toán).Vì giá trị của điểm ảnh được biểu diễn bởi 2 giá trị là 0 hoặc 1, nên 1 điểm ảnh được biểu diễn bằng 1 bit nên ảnh có kích thước rất nhỏ.

Nhị phân hóa

Là quá trình biến đổi 1 ảnh xám thành ảnh nhị phân.

Gọi giá trị cường độ sáng tại 1 điểm ảnh là I(x,y).INP(x,y) là cường độ sáng của điểm ảnh trên ảnh nhị phân .(Với0

Để biến đổi ảnh xám thành ảnh nhị phân. So sánh giá trị cường độ sáng của điểm ảnh với 1 ngưỡng nhị phân T.

Nếu I(x,y) > T thì INP(x, y) = 0 (0).Nếu I(x,y) > T thì INP(x, y) = 255 (1).

Chú ý

Có thể chọn giá trị T từ 0 đến 255, nhưng thông thường nhiều người hay chọn 1 giá trị đó là 128 tức là giá trị trung bình của max(255) và min(0) của cường độ sáng (Intensity) của điểm ảnh.Dễ dàng nhận thấy với mỗi T thì có 1 ảnh nhị phân khác nhau (Khác nhau ở đây là cường độ sáng của các tấm ảnh nhị phân với mỗi giá trị T).

Có 1 kỹ thuật gọi là nhị phân hóa ngưỡng động giúp thu được ảnh nhị phân mà không quan tâm tới cường độ sáng.

Nhị phân hóa trong OpenCVPhương thức threshold

Để chuyển 1 ảnh thành 1 ảnh nhị phân, sử dụng phương thức threshold().

threshold(cv::InputArray src, cv::OutputArray dst, double thresh, double maxval, int type);

Phân tích


src: hình ảnh gốc (Trong bài viết này là ảnh màu).dst: ảnh thu được (Trong bài viết này là ảnh nhị phân).thresh: ngưỡng nhị phân T.maxval: giá trị lớn nhất trong ảnh (maxval = 255 đối với ảnh xám).type: kiểu nhị phân.Code minh hoạ phương thức threshold trong OpenCV// www.stdio.vn// www.stdio.vn/users/index/11/truong-dat#include #include "opencv2/core/core.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;int main(){// Read imageMat image = imread("stdio.png", CV_LOAD_IMAGE_GRAYSCALE);Mat imageBinary;// Check for validif (!image.data){printf("Could not open or find the image\n");return -1;}threshold(image, imageBinary, 220, 255, CV_THRESH_BINARY);// Create and show image in windowimshow("STDIO OpenCV Sample", imageBinary);// Wait input and exitwaitKey(0);return 0;}
*

Nhị phân hóa ngưỡng động

Ý tưởng:

Chia ảnh thành nhiều khu vực, cửa sổ khác nhau (Region).Dùng 1 thuật toán để tìm 1 giá trị T phù hợp với từng khu vực, cửa sổ (Region).Áp dụng phương pháp nhị phân hóa cho từng khu vực, cửa sổ (Region) với T phù hợp.

Điều quan trọng trong kỹ thuật này là phải tìm 1 giá trị T phù hợp với từng khu vực, cửa sổ (Region) hoặc cả tấm ảnh. Có rất nhiều phương pháp để tìm T, ở nội dung tiếp theo sẽ giới thiệu 1 số thuật toán giúp tìm kiếm giá trị T này.

Thuật toán Otsu

Bước 1:Xác định T1. Giá trị cho T1ban đầu nên chọn là (0+255) / 2 = 128.

Bước 2:Phân loại thành 2 nhóm điểm ảnh.

Loại 1 (Type1): chứa tất cả các điểm ảnh có giá trị cường độ sáng (Intensity) Loại 2 (Type2): chứa tất cả các điểm ảnh có giá trị cường độ sáng (Intensity) > T.

Bước 3:Tính giá trị cường độ sáng trung bình (iAverage) cho Type1 (iAverage1) và Type2 (iAverage2).

Bước 4:Tính giá trị T2 theo công thức (iAverage1 + iAverage2) /2.

Bước 5:So sánh T1 và T2.

Nếu giá trị chênh lệch của T1 và T2 Nếu giá trị chênh lệch của T1 và T2 > Deltathì quay lại Bước 1.

Xem thêm: Sơ Đồ Tư Duy Sinh Học 7 Chi Tiết Nhất, Sơ Đồ Tư Duy Giun Đất


*

Thuật toán đối xứng

Bước 1: khởi tạo mảng Histogram(histogram). Tìm giá trị cường độ sáng (intensityMax) có tuần suất xuất hiện nhiều nhất histogram.


Bước 2: duyệt toàn bộ các mức xám giảm từ 255 đến intensityMax. Nếu tại mức xám nào có tuầnsuất xuất hiện trên ảnh là 5% thì dừng lại. Lấy giá trị đối xứng qua histogram là ngưỡng động T.

for (int indexIntensity = 255; indexIntensity >= intensityMax; indexIntensity--){frequency = histogram;if ((float)frequency / (image.Width * image.Height) == 0.05f) {split = indexInteensity;break;}}T = intensityMax - (split - intensityMax);
*

Thuật toán tam giác

Bước 1: Khởi tạo mảng Histogram(histogram).

Tìm giá trị intensityMax vàhistogram.Tìm giá trịintensityMinvàhistogram.

Bước 2: Duyệt toàn bộ các mức xám từ intensityMinđến intensityMax. Tính khoảng cách tương ứng sau đó xét ngưỡng Tbằng giá trị mức xám có khoảng cách lớn nhất.

for(int index = intensityMin+1; index a và b: lần lượt là 2 điểm khác biệt trên đường thẳng.c: là điểm cần tìm khoảng cách tới đường thẳng.
Nhị phân hóa ngưỡng độngtrong OpenCVPhương thức adaptiveThreshold

Để chuyển 1 ảnh thành 1 ảnh nhị phân, sử dụng phương thức adaptiveThreshold()

adaptiveThreshold(cv::InputArray src, cv::OutputArray dst, double maxValue,int adaptiveMethod, int thresholdType, int blockSize, double C);

Phân tích

src: hình ảnh gốc (Trong bài viết này là ảnh màu).dst: ảnh thu được (Trong bài viết này là ảnh nhị phân).thresh: ngưỡng nhị phân T.maxValue: giá trị lớn nhất trong ảnh (maxval = 255 đối với ảnh xám).adaptiveMethod: cách thức nhị phân với ngưỡng động, nó chính là cách tính giá trị ngưỡng nhị phân trong từng vùng cần nhị phân.thresholdType: kiểu nhị phân.blockSize: kích thước của cửa sổ (Region) áp dụng cho việc tính toán ngưỡng động (nên chọn các giá trị %3 = 0 || %5 = 0 || %7 = 0).C: thông số để bù trừ trong trường hợp ảnh có độ tương phản quá lớn.Code minh hoạ phương thức adaptiveThreshold trong OpenCV#include #include "opencv2/core/core.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;int main(){// Read imageMat image = imread("stdio.png", CV_LOAD_IMAGE_GRAYSCALE);Mat imageBinary;// Check for validif (!image.data){printf("Could not open or find the image\n");return -1;}adaptiveThreshold(image, imageBinary, 255, CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY, 9, 0);// Create and show image in windowimshow("STDIO OpenCV Sample", imageBinary);// Wait input and exitwaitKey(0);return 0;}

Computer Vision

Thị giác máy tính.


*
Reply
*
2
*
0
*
Chia sẻ

Room Inventory là gì

Cùng là một động từ Lie, nhưng khi bạn kết hợp động từ này với các giới từ khác nhau thì lại mang ý nghĩa khác nhau. Hôm nay, Studytienganh sẽ cùng với ...


Quyền hạn chức năng là gì

Quyền hạn (tiếng Anh: Authority) trong tổ chức là quyền tự chủ trong hành động, trong quá trình quyết định và đòi hỏi sự tuân thủ quyết định gắn liền ...


Decide danh từ là gì

Decide đi với giới từ gì? Cách dùng decide là thắc mắc của rất nhiều bạn học tiếng Anh. Để hiểu hơn về ý nghĩa, ngữ pháp cũng như cách sử dụng Decide ...


Hỏi ĐápLà gì
Mom sông nghĩa là gì

Phân tích bài thơ Thương vợ của Tú xương (bài 2). ...


Hỏi ĐápLà gì Ngôn ngữNghĩa là gì
Vì sao thực vật được xem là sinh vật sản xuất

Sinh vật tiêu thụ là loài rất quen thuộc trong cuộc sống của chúng ta. Chúng là những sinh vật đóng vai trò rất quan trọng. Chủ yếu là trong việc duy trì sự ...


Bookworm nghĩa là gì

Bookworm Là Gì Nghĩa Của Từ Bookworm Trong Tiếng Việt Là Gì 1 Tháng Tám, 2021 Là ...


Độ trượt của bánh xe là gì
Cơ thể con người có bao nhiêu bộ phận

Cơ thể người là một trong những điều mà tạo hóa trao tặng cho mỗi chúng ta, mỗi một bộ phận đều có trong mình thiên chức của nó. Hiểu về các bộ phận ...


Cuba Tiếng Anh là gì

Các bạn đang học tiếng Anh và yêu địa lý chắc chắn sẽ tò mò phiên âm tiếng Anh tên các nước trên thế giới. Việc học tiếng Anh qua những từ vựng tiếng ...


Công suất 600W là gì

10 câu hỏi trước khi mua cục đẩy công suất mà bạn nên biếtĐã có 9546 lượt xem sản phẩmCục đẩy công suất dù đã được du nhập vào Việt Nam được ...


Máy rửa mặt Foreo Luna 3 sản xuất ở đâu

Máy rửa mặt Foreo Luna 3 là một model máy rửa mặt full size hiếm hoi trong các dòng máy rửa mặt của Foreo được chị em ưa thích ngoài các mẫu mini nhỏ ...


Hỏi ĐápỞ đâuCông NghệMáy
Doris có nghĩa là gì

100+ tên tiếng Anh cho bé gái hay & nhiều ý nghĩa đẹp ...


Hỏi ĐápLà gìNgôn ngữNghĩa là gì
Lỗi lấn làn phạt bao nhiêu

Khi tham gia giao thông đường bộ có lẽ các bạn không còn xa lạ gì với vạch kẻ đường dành riêng cho các phương tiện khác nhau. Tuy nhiên hiện nay tình trạng ...


Tại sao khí CO lại độc

Chuyên về y học, dành cho các bác sỹ, dược sỹ, học viên và sinh viên tự đăng bài viết về sức khỏe, trao đổi nội bộ nhằm nâng cao kiến thức phục vụ ...


Iphone Full CN là gì

iPhone lock là iPhone được bán ra kèm hợp đồng của nhà mạng nên chỉ dùng được sim của nhà mạng đó. Để kiểm tra đượciPhonelock hay quốc tế không phải ...


Kinh tuyến Tây ở đâu

trình bày các khái niệm về kinh tuyến kinh tuyến gốc kinh tuyến đông kinh tuyến tây vĩ tuyến vĩ tuyến gốc vĩ tuyến bắc vĩ tuyến nam bán cầu bắc bán cầu ...


B1 tương đương bao nhiêu IELTS

1. Tìm hiểu bằng tiếng Anh b1 tương đương ielts bao nhiêu? 1.1. Bạn biết gì về trình độ tiếng Anh B1? Trình độ tiếng Anh B1 là trình độ tiếng Anh thuộc ...


Cầm đèn chạy trước ô tô tiếng Anh là gì

Giải thích thành ngữ cầm đèn chạy trước ô tô có nghĩa là gì? Nhiều người thắc mắc Giải thích thành ngữ cầm đèn chạy ...

Xem thêm: Chi Phí Vận Hành Là Gì - Chi Phí Để Vận Hành Công Ty Vừa Và Nhỏ


Thiền quán tâm là gì

Tứ Niệm Xứ (Pali; Skt: smṛtyupasthāna) là một thuật ngữ Phật giáo quan trọng, có nghĩa là sự thiết lập, xây dựng chánh niệm tỉnh giác hay chánh niệm hiện ...


Thế nào là quán tính