Tại sao chúng ta sử dụng không gian màu HSV thường xuyên như vậy trong xử lý hình ảnh và hình ảnh?


64

Tôi thấy không gian màu HSV được sử dụng ở mọi nơi: để theo dõi, phát hiện con người, v.v ... Tôi đang tự hỏi, tại sao? Điều gì về không gian màu này làm cho nó tốt hơn so với sử dụng RGB?


3
Đây là một câu hỏi rất hay. Theo tôi, sẽ có lợi hơn khi được chi tiết hơn một chút: HSV là gì, RGB là gì. Vì hầu hết các câu trả lời đang so sánh HSV với RGB, tiêu đề có thể được chia sẻ lại để so sánh hai không gian màu này.
PhilMacKay

2
Một câu hỏi hay khác có thể là "Tại sao HSV được sử dụng ở mọi nơi thay vì HSL?"
posfan12

Câu trả lời:


60

Câu trả lời đơn giản là không giống như RGB , HSV tách biệt độ sáng , hoặc cường độ hình ảnh, từ sắc độ hoặc thông tin màu sắc. Điều này rất hữu ích trong nhiều ứng dụng. Ví dụ, nếu bạn muốn thực hiện cân bằng biểu đồ của hình ảnh màu, có lẽ bạn chỉ muốn làm điều đó trên thành phần cường độ và để các thành phần màu một mình. Nếu không bạn sẽ có được màu sắc rất lạ.

Trong thị giác máy tính, bạn thường muốn tách các thành phần màu khỏi cường độ vì nhiều lý do, chẳng hạn như độ mạnh để thay đổi ánh sáng hoặc loại bỏ bóng.

Tuy nhiên, lưu ý rằng HSV là một trong nhiều không gian màu tách màu khỏi cường độ (Xem YCbCr, Lab, v.v.). HSV thường được sử dụng đơn giản vì mã để chuyển đổi giữa RGB và HSV có sẵn rộng rãi và cũng có thể dễ dàng thực hiện. Ví dụ: Hộp công cụ xử lý ảnh cho MATLAB bao gồm các hàm rgb2hsvhsv2rgb.


42

Thông tin màu sắc thường ồn hơn nhiều so với thông tin HSV.

Để tôi cho bạn một ví dụ: Tôi và một số người bạn đã tham gia vào một dự án liên quan đến việc nhận biết các biển báo giao thông trong các video cảnh thực (tiếng ồn, bóng tối và đôi khi hiện diện tắc). Đó là một phần của một dự án lớn hơn, vì vậy cho phép chúng tôi có thời gian để thử các cách tiếp cận khác nhau cho vấn đề cụ thể này (và sử dụng lại các phương pháp cũ hơn). Bản thân tôi đã không thử cách tiếp cận dựa trên màu sắc, nhưng tôi nhớ một thông tin thú vị: _ Thành phần RGB chiếm ưu thế trong dấu hiệu STOP thường không có màu đỏ! (chủ yếu là do bóng tối)

Bạn thường có thể nhận được thông tin tốt hơn từ không gian màu HSV . Hãy để tôi thử và đưa ra một ví dụ kinh nghiệm cá nhân một lần nữa: Hãy thử tưởng tượng bạn có một hình ảnh của một mặt phẳng một màu với một bóng trên đó. Trong không gian màu RGB, phần bóng rất có thể sẽ có các đặc điểm rất khác so với phần không có bóng. Trong không gian màu HSV, thành phần màu của cả hai bản vá có nhiều khả năng giống nhau: bóng sẽ ảnh hưởng chủ yếu đến giá trị , hoặc có thể là thành phần bão hòa , trong khi màu sắc , biểu thị "màu" chính (không có độ sáng và độ pha loãng của màu trắng / đen) không nên thay đổi quá nhiều.

Nếu giải thích này không có vẻ trực quan với bạn, tôi đề nghị:

  • thử và hiểu rõ hơn các thành phần được sử dụng để thể hiện màu trong không gian màu HSV và làm mới kiến ​​thức về RGB
  • hãy thử và xem lý do tại sao các loại biểu diễn màu này được phát triển: nó luôn luôn theo một cách nào đó, dựa trên một số quan điểm về sự giải thích của con người về màu sắc

    ví dụ như trẻ em không thực sự thích cao màu == có giá trị đối tượng, họ thích cao satuated đối tượng, đối tượng, trong đó màu sắc là mãnh liệt và không pha loãng

  • sau khi bạn có được điều này và phát triển một số trực giác, bạn nên chơi với hình ảnh: thử phân tách các hình ảnh khác nhau trong các thành phần RGB và HSV của chúng

    Mục tiêu của bạn sẽ là nhìn và hiểu sự khác biệt trong các phân tách này đối với các hình ảnh có chứa bóng, chiếu sáng mạnh, phản xạ ánh sáng.

  • nếu bạn có một loại hình ảnh cụ thể mà bạn muốn chơi, hãy thử phân tách chúng: ai biết được, có lẽ RGB thực sự phù hợp với nhu cầu của bạn hơn HSV :)


1
Nếu là bóng, nó chỉ thay đổi độ sáng - không bão hòa.
Andrey Rubshtein

@Andrey như tôi đã nói, tôi đã không làm việc theo cách tiếp cận dựa trên màu sắc, nhưng tôi có thể suy đoán rằng nếu đó không chỉ là một cái bóng - có lẽ một số ánh sáng gián tiếp từ môi trường xung quanh hoặc một cái gì đó tương tự cũng đóng một vai trò.
Penelope

1
Bạn đúng rồi. Tuy nhiên, trong trường hợp chiếu sáng gián tiếp, Huế cũng có thể thay đổi.
Andrey Rubshtein

1
@Andrey Do đó, từ ngữ của tôi: "nhiều khả năng", "tương tự", "ảnh hưởng chủ yếu", ... Sau tất cả, tôi đã không giải thích HSV, chỉ đưa ra một số ví dụ và phỏng đoán dựa trên kinh nghiệm. Và, cách tốt nhất để chọn không gian màu phù hợp nhất cho bất kỳ ứng dụng nào là chơi xung quanh với cơ sở dữ liệu hình ảnh của bạn và các không gian màu khác nhau
penelope

3
Bất cứ thứ gì trong bóng tối và do đó không được thắp sáng bởi nguồn sáng chính (mặt trời) đang được thắp sáng bởi nguồn sáng thứ cấp - bầu trời, là một ánh sáng khổng lồ, sáng và rất xanh. Mắt người đỏ vẫn trông đỏ vì mắt chúng ta đo màu tương đối thay vì màu tuyệt đối, đó là lý do tại sao ảnh trong nhà, không flash của bạn trông có màu vàng hơn bạn nghĩ. Và tôi hoàn toàn đồng ý về việc chơi xung quanh với cơ sở dữ liệu hình ảnh thực sự của bạn.
John Robertson

8

Chỉ sử dụng thành phần Hue làm cho thuật toán ít nhạy hơn (nếu không bất biến) đối với các biến thể chiếu sáng.

Một tùy chọn phổ biến khác là không gian màu LAB, trong đó các kênh AB đại diện cho khoảng cách màu và euclide trong không gian AB phù hợp hơn với nhận thức của con người về màu sắc. Một lần nữa, bỏ qua kênh L (Luminance) làm cho thuật toán mạnh mẽ hơn đối với sự khác biệt về ánh sáng.


7

Câu trả lời tốt nhất tôi có thể hình dung là: RGB phải thực hiện với "chi tiết triển khai" liên quan đến cách RGB hiển thị màu sắc và HSV phải thực hiện với các thành phần "màu thực tế". Một cách khác để nói điều này sẽ là RGB là cách máy tính xử lý màu sắc và HSV cố gắng nắm bắt các thành phần của cách con người chúng ta cảm nhận màu sắc.

Tôi sẽ giải thích:

Màu sắc là một nhận thức dựa trên sóng điện từ. Tính chất tự nhiên của các sóng này, ví dụ cường độ và tần số. Nếu chúng ta quét tần số của một luồng sáng từ hồng ngoại đến cực tím, chúng ta sẽ cảm nhận được một cách trực quan một sự biến đổi màu sắc dọc theo các màu cầu vồng. Màu sắc cầu vồng có thể được coi là "màu thuần khiết" vì chúng được biểu thị bằng sóng đơn tần.

Bây giờ mắt người chỉ có thể đáp ứng, hoặc "cộng hưởng" với ba tần số ánh sáng chính, không đáng ngạc nhiên là đỏ, lục và lam. Thực tế là phản ứng này là phi tuyến tính, do đó võng mạc có thể phân biệt một màu thuần nhất định (và ngầm định là "tần số" của nó) bằng phản ứng kết hợp của ba thành phần màu .

Không gian màu RGB tồn tại như vậy chỉ để bắt chước hoạt động bên trong võng mạc của chúng ta, do đó, phần lớn màu sắc có thể được biểu thị trên màn hình máy tính bằng phương tiện thuận tiện (từ quan điểm của máy tính) màu 24 bit mỗi pixel mã hóa. Không gian màu RGB không có mối quan hệ nội tại với các thuộc tính màu tự nhiên, cũng không liên quan đến sự giải thích của con người về màu sắc.

Ví dụ, bất kỳ hoạt động đối xứng nào được thực hiện theo kênh trong không gian RGB (ví dụ: tạo độ dốc màu) cho kết quả rất thô hoặc thậm chí là "sai". Đó là lý do tại sao nên tạo các bản đồ màu bằng cách chuyển đổi các điểm dừng màu từ RGB sang các không gian màu khác (HLS, Lab, v.v.), thực hiện các phép nội suy, sau đó chuyển các giá trị nội suy trở lại RGB.

Hi vọng điêu nay co ich!


2
Tôi không đồng ý. Có ba miền, không phải hai: con người, máy tính và vật lý. Mô hình RGB có nguồn gốc từ mắt người, có ba thụ thể màu.
MSalters

@MSalters Tôi nghĩ chúng ta đang nói về những điều tương tự (mặc dù có lẽ tôi đã không làm cho mình hoàn toàn rõ ràng). Các màn hình RGB được tạo ra để phù hợp với hệ thống nhận biết màu sắc của chúng tôi. Họ có một bộ phận đối diện máy tính, "tọa độ" (R, G, B). Do các tọa độ này ánh xạ đến việc thực hiện thay vì các tính chất vật lý, "bản chất thực" của màu sắc, chúng không phù hợp để thực hiện một số xử lý toán học, ví dụ như nội suy độ dốc tuyến tính, hiệu chỉnh màu sắc, độ sáng và độ bão hòa, v.v.
heltonbiker

2

HSV là viết tắt của Hue-Saturation-Value. Nó thực sự là một loại biểu diễn mặt phẳng màu (như RGB, YCbCr, v.v.).

Đây là định dạng biểu diễn màu độc lập của thiết bị: Biểu diễn màu HSV rất hữu ích để phát hiện các loại màu cụ thể, ví dụ: màu da, màu lửa, v.v.

MatlabChức năng chuyển đổi hình ảnh RGB sang mặt phẳng HSV là rgb2hsv('/inputimage_name').


1

Tôi sẽ cho bạn một ví dụ để hiểu. Giống như bàn tay của chúng ta có nhiều phần lòng bàn tay, lòng bàn tay trở lại, và dưới đó. chúng ta có thể thấy sự thay đổi màu sắc khác nhau trong các khu vực này, nhưng màu sắc cho tất cả các khu vực này không khác nhau nhiều, vì vậy giá trị màu sắc có thể hữu ích trong phân đoạn tay.


1

Không có gì tôi biết về điều đó đặc biệt tốt hơn với HSV so với YUV hoặc LAB sẽ giúp việc trích xuất tính năng và chiếu sáng hoặc hình ảnh hóa trở nên tốt hơn. Tôi đoán HSV là cái được sử dụng phổ biến hơn vì quy ước và tính liên tục: việc so sánh kết quả và giao tiếp với nhau sẽ dễ dàng hơn nếu cả hai bạn sử dụng cùng một không gian màu.

Như đã nói, HSV (trái ngược với RGB) được sử dụng trong thị giác máy tính vì 2 lý do tôi biết:

  1. Trực quan . Bất cứ khi nào bạn có thông tin định hướng dày đặc trên một hình ảnh, thì HSV là một không gian màu tốt để trực quan hóa. Thay vì vẽ các vectơ nhỏ trên một hình ảnh (chúng sẽ làm lộn xộn mọi thứ), bạn có thể vẽ màu với HSV, bằng cách đặt vectơ định hướng được ánh xạ tới H (góc vectơ) và S (cường độ vectơ). Điều này để lại thành phần Giá trị, có thể được đặt theo bất kỳ số cách nào tùy thuộc vào những gì bạn muốn đạt được. Xem ví dụ dưới đây từ bộ dữ liệu dòng quang midbury. HSV được sử dụng để hiển thị hướng dày đặc.

Ví dụ từ middlebury DB về dòng quang

  1. Tính năng trích xuất và chiếu sáng bất biến , như được giải thích trong các câu trả lời khác.

0

Như những người khác đã đề cập, có lợi khi tách luma khỏi sắc độ. Luma thay đổi rất nhiều trong cảnh dựa trên lượng ánh sáng rơi vào vật thể. Mặt khác, Chroma tương quan tốt hơn với các thuộc tính bên trong của đối tượng và đối với các hình ảnh cân bằng trắng đúng là ít nhiều bất biến.

Tuy nhiên, tôi muốn thêm rằng HSV, HSL, hoặc trên thực tế, bất kỳ không gian màu nào có tham số cực của mặt phẳng sắc độ, là những lựa chọn không tốt cho mục đích đó. Đó là bởi vì họ giới thiệu một điểm kỳ dị trên dòng màu xám (màu nào là màu xám?), Khiến chúng rất nhạy cảm với nhiễu và cân bằng trắng. Ngoài ra, so sánh giữa hai màu trong một hệ tọa độ cực không đơn giản như trước. Cũng lưu ý rằng cả giá trị trong HSV và độ sáng trong HSL đều không tương ứng với độ sáng cảm nhận của con người hoặc bất kỳ thước đo vật lý nào khác của năng lượng.

Có rất nhiều không gian màu tuyến tính tạo ra sự phân tách luma-chroma giống nhau trong khi bảo tồn tuyến tính (YCbCr, YUV) hoặc mô hình thị giác của con người đúng cách (LUV, LAB). Với những màu bạn có thể so sánh hai màu bằng cách sử dụng chỉ tiêu Euclide L2 về màu sắc của chúng, dẫn đến một thuật toán tổng thể mạnh mẽ hơn.

Tại sao HSV / HSL được sử dụng thường xuyên như vậy sau đó? Khó để đưa ra một câu trả lời khách quan. Theo kinh nghiệm của tôi, chủ yếu là do sự thiếu hiểu biết và sự sẵn có của các thói quen chuyển đổi RGB-> HSV. Phải làm việc với mã mà các tác giả không hiểu về hiệu chỉnh gamma, chứ đừng nói đến các không gian màu khác nhau. Nhìn thấy mã đã chuyển đổi RGB sang HSV sau đó phân đoạn hình ảnh dựa trên màu sắc, không quan tâm đến thực tế rằng đó là một số lượng mô-đun. Tôi nghĩ rằng chúng ta có thể đồng ý rằng những quyết định không có ý thức được ủng hộ bởi bất kỳ lý do nào.


-1

Mô hình màu HSV tương quan nhiều hơn với cách con người nhìn thấy các vật thể màu, so với RGB, YUV, Lab, v.v.

Chúng ta thấy vật thể có màu gì (Huế), nó bão hòa bao nhiêu (Saturation) và bao nhiêu ánh sáng trắng rơi vào nó (Intesity).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.