2012-06-29 43 views
5

Tôi muốn nhận giá trị RGB của hình ảnh trong nhiều điều kiện ánh sáng. Để có được một kịch bản trung lập nào đó, tôi muốn chuẩn hóa các giá trị RGB với các giá trị RGB của một số hình ảnh được xác định trước.Cách chuẩn hóa giá trị RGB với giá trị RGB tham chiếu

Hãy để tôi giải thích. Tôi có 6 hình ảnh được xác định trước và tôi biết giá trị RGB trung bình chính xác của chúng. Bây giờ tôi sẽ đưa hình ảnh của hình ảnh không rõ trong điều kiện ánh sáng khác nhau. Tôi cũng sẽ chụp ảnh của 6 ảnh được xác định trước trong cùng điều kiện. Bây giờ mục tiêu của tôi là xác định một công thức chuẩn hóa bằng cách so sánh giá trị rgb tham chiếu đã biết của các hình ảnh được xác định trước với các giá trị được tính từ hình ảnh của máy ảnh. với thông số chuẩn hóa này, tôi sẽ hiệu chỉnh giá trị RGB của hình ảnh không xác định. Vì vậy, tôi có thể nhận được giá trị RGB trung bình từ hình ảnh không xác định một cách trung lập bất kể điều kiện ánh sáng.

Làm cách nào tôi có thể thực hiện điều này dễ dàng trong Java.

Trả lời

0

Đối với các điều kiện ánh sáng khác nhau, điều chỉnh RGB tuyến tính là tất cả những gì cần thiết. Chỉ cần nhân mỗi giá trị R, G, B bằng một hằng số bắt nguồn cho mỗi kênh.

Nếu chỉ có một màu tham chiếu, nó sẽ dễ dàng nhân với màu tham chiếu và chia cho màu đã chụp. Ví dụ: nếu màu tham chiếu của bạn là (240,200,120) nhưng hình ảnh của bạn được đo (250,190,150) - bạn sẽ nhân đỏ với 240/250, màu xanh lá cây lên 200/190 và màu xanh lam là 120/150. Sử dụng các hằng số giống nhau cho mỗi pixel trong hình ảnh.

Với nhiều màu sắc phù hợp, bạn sẽ phải tính trung bình các hệ số hiệu chỉnh để đến một tập hợp các hằng số. Cần tăng trọng số cho các màu sáng hơn, ví dụ nếu bạn có tham chiếu (200.150,20) và đo được (190,140,10), bạn sẽ cố gắng tăng gấp đôi lượng màu xanh có thể rất xa. Phương pháp đơn giản nhất là tổng hợp tất cả các giá trị tham chiếu và chia cho tổng các giá trị đo được.

+0

Xin chào, tôi đang sử dụng phương pháp của bạn. Bây giờ thay vì các giá trị RGB tôi đang sử dụng không gian màu HSI, và chỉ chuẩn hóa ma trận cường độ. –

+0

@P basak - Nói cách khác, bạn chủ yếu làm những gì tôi đề xuất nhưng với HSI thay vì YUV.SO nói cách khác bạn đã chỉ đơn giản là muốn bình thường hóa một cái gì đó rất giống với một kênh độ sáng !!! – trumpetlicks

+0

@Mark - Vì vậy, về cơ bản những gì bạn đang đề xuất là mức trung bình cho mỗi kênh, sau đó sử dụng các mức trung bình đó làm hệ số chuẩn hóa cho các hình ảnh mới. – trumpetlicks

1

Lý do bạn làm điều này để thực sự bình thường hóa RGB hoặc bạn đang cố gắng bình thường hóa hình ảnh để có độ sáng tương tự. Bởi vì nếu mục tiêu của bạn chỉ đơn giản là độ sáng, thì tôi sẽ chuyển đổi thành một tiêu chuẩn màu có thành phần độ sáng và chỉ chuẩn hóa thành phần độ sáng.

Từ đó bạn có thể chụp ảnh mới theo tiêu chuẩn thành phần màu khác nhau và chuyển đổi trở lại RGB nếu muốn.

Các bước (nhưng không phải trong java):

1) Convert - RGBImage --> YUVImage 
2) Normalize RGBImage using the Y component 
3) Convert - Normalized(YUVImage) --> Normalized(RGBImage) 

Bằng cách này bạn có thể thực hiện Normalization trên độ sáng bằng cách sử dụng algorithm described here.

ELSE, bạn có thể tính trung bình giá trị trung bình cho mỗi kênh và sử dụng số đó làm tử số cho các yếu tố chuẩn hóa cho hình ảnh mới của bạn tính riêng từng kênh.

+0

Xin chào Tôi muốn thực sự bình thường hóa rgb. –

+0

Tôi muốn một cái gì đó như hiệu chuẩn. Tôi muốn tính toán độ lệch từ các hình ảnh tham chiếu và áp dụng độ lệch đó cho hình ảnh không xác định để nhận các giá trị trung tính. –

+0

Tôi chuyển đổi sang không gian màu HSI. Bây giờ tôi đang tìm kiếm một cách để bình thường hóa chỉ số của tôi với tham chiếu. –

Các vấn đề liên quan