由RGB到HSV的轉換詳解

2021-03-02 FPGA開源工作室

RGBHSV的轉換詳解

1RGB色彩空間

    在圖像處理中,最常見的就是RGB色彩模型。在RGB模型中,每種顏色出現在紅、綠、藍的原色光譜分量中。該模型基於笛卡爾坐標系。如圖1所示,RGB原色值位於3個角上;二次色青色,深紅色和黃色位於另外三個角上,黑色位於原點處,白色位於裡原點最遠的角上。

圖1 RGB色彩模型

圖1左 RGB彩色立方體示意圖。圖1右,RGB 24bit彩色立方體。原點到白色頂點的中軸線是灰度線,r、g、b三分量相等,強度可以由三分量的向量表示。

用RGB來理解色彩、深淺、明暗變化:

色彩變化:三個坐標軸RGB最大分量頂點與黃紫青YMC色頂點的連線

深淺變化:RGB頂點和CMY頂點到原點和白色頂點的中軸線的距離

明暗變化:中軸線的點的位置,到原點,就偏暗,到白色頂點就偏亮

光學的分析

三原色RGB混合能形成其他的顏色,並不是說物理上其他顏色的光是由三原色的光混合形成的,每種單色光都有自己獨特的光譜,如黃光是一種單色光,但紅色與綠色混合能形成黃色,原因是人的感官系統所致,與人的生理系統有關。

只能說將三原色光以不同的比例複合後,對人的眼睛可以形成與各種頻率的可見光等效的色覺。

 

2 HSV色彩空間

HSV色彩空間如圖2所示圓錐體。色度表示圓錐角。HSV(Hue, Saturation, Value)是根據顏色的直觀特性由A. R. Smith在1978年創建的一種顏色空間, 也稱六角錐體模型(Hexcone Model)。

這個模型中顏色的參數分別是:色調(H),飽和度(S),明度(V)。

色調H

用角度度量,取值範圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;

飽和度S

飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結果。其中光譜色所佔的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而豔。光譜色的白光成分為0,飽和度達到最高。通常取值範圍為0%~100%,值越大,顏色越飽和。

明度V

明度表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,此值和物體的透射比或反射比有關。通常取值範圍為0%(黑)到100%(白)。

 

 

圖2 HSV色彩模型

3 RGB色彩空間轉HSV


4 HSV在圖像處理應用

HSV在用於指定顏色分割時,有比較大的作用。

H和S分量代表了色彩信息。

分割應用:

    用H和S分量來表示顏色距離,顏色距離指代表兩種顏色之間的數值差異。

    Androutsos等人通過實驗對HSV顏色空間進行了大致劃分,亮度大於75%並且飽和度大於20%為亮彩色區域,亮度小於25%為黑色區域,亮度大於75%並且飽和度小於20%為白色區域,其他為彩色區域。

   對於不同的彩色區域,混合H與S變量,劃定閾值,即可進行簡單的分割。

5 matlab實現RGBHSV

clear

clc

close all

 

img = imread('1.bmp');

figure, imshow(img), title('RGB image')

 

img = im2double(img);

 

R = img(:,:,1);

G = img(:,:,2);

B = img(:,:,3);

 

imgsize = size(img);

row = imgsize(1);

column = imgsize(2);

 

%%Calculation Of V

 

for i=1:1:row

    for j=1:1:column

        maxMatrix(i,j) =max(max(R(i,j),G(i,j)),B(i,j));

        minMatrix(i,j) =min(min(R(i,j),G(i,j)),B(i,j));

    end

end

 

V = maxMatrix;

figure, imshow(V), title('V image without using rbg2hsv ')

 

%% Calculation Of S

 

for i=1:1:row

    for j=1:1:column

        if V(i,j) == 0

            S(i,j) = 0;

        else

            S(i,j) = (maxMatrix(i,j)-minMatrix(i,j)) / maxMatrix(i,j);

        end

    end

end

 

figure, imshow(S), title('S image without using rgb2hsv ')

 

%% Calculation Of H

 

for i=1:1:row

    for j=1:1:column

        if    maxMatrix(i,j) == R(i,j)

            H(i,j) = (1/6)*(0 + ((G(i,j) -B(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

           

        elseif maxMatrix(i,j) == G(i,j)

            H(i,j) = (1/6)*(2 + ((B(i,j) -R(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

            

        elseif maxMatrix(i,j) == B(i,j)

            H(i,j) = (1/6)*(4 + ((R(i,j) -G(i,j))  / (maxMatrix(i,j)-minMatrix(i,j))));

        end

       

        if H(i,j) < 0

            H(i,j) = H(i,j) + 360;

        end  

    end

end

 

figure, imshow(H), title('H image without using rgb2hsv ')

 

HSV = cat(3,H,S,V);

 

figure, imshow(HSV), title('HSV image without using rgb2hsv ')

 


實驗原圖

V分量

S分量

H分量

HSV圖像(RGB轉換後)

更多精彩推薦,請關注我們

相關焦點

  • QTX光譜數據如何轉換成LAB / RGB / XYZ數值?
    如何將QTX光譜數據轉換成LAB / RGB / XYZ數值方便我們使用呢?在這裡先隆重介紹一下我們千通彩近期開發的色彩工具箱,裡面包含了很多色彩轉換過程中需要用到的實用小工具,其中就包含了馬上要介紹的QTX光譜數據轉化工具,名稱叫:光譜反射計算。
  • HSV色彩空間變換
    融合原理:圖像融合一般意義上是將高分全色影像和低分RGB影像融合,由此得到高分的彩色影像,而HSV圖像融合是將兩個影像轉換為HSV格式後,用高分影像的V分段替換低分影像的V分段,在逆變換為//////////////////////////////////C++版本#include "cv.h"  #include "highgui.h"  #include "cxcore.h"   // 將色調H的取值範圍轉換到
  • 谷歌搜索現已支持RGB/16進位色轉換
    (原標題:谷歌搜索現已支持RGB/16進位色轉換)
  • 記一次HEX和RGB互換算法的思考及應用
    作為前端工程師, 我們平時在對接設計稿的時候, 是不是經常會涉及到顏色值的轉換呢?比如從HEX值轉化到RGB值, 亦或者是從RGB值轉換到HEX值, 這塊在PhotoShop等設計軟體中非常常見, 在做類似於畫板, 設計類的IDE的時候也經常會用到它們的互相轉換, 還有一種場景是,為了滿足老闆對高大上特效的要求, 我們要讓動畫在不同的時間顯示不同的顏色,而且有過渡效果(過渡效果雖然可以通過transiton來實現),如下:所以筆者在這裡就分享一下HEX與RGB之間相互轉換的原理和算法
  • C# 16進位轉換10進位相關函數詳解
    C# 16進位轉換10進位相關函數詳解 在C#中可以對整型運算對象按位進行邏輯運算,同時也可以實現C# 16進位轉換10進位,C#10進位轉換2進位等功能。
  • 基於FPGA的RGB到YCrCb顏色空間轉換
    這裡推導出一種適合在FPGA上實現從RGB到YCbCr顏色空間變換的新算法,採用單片FPGA完成電路設計,利用FPGA內嵌DSP核實現乘法運算,提高了轉換算法的運行速度。l 顏色空間 在RGB顏色空間中,自然界所有顏色都可以用紅(R)、綠(G)、藍(B)三種顏色的不同強度組合而重現。RGB的取值範圍分別為0~255,表1列出了幾種顏色對應的R,G,B取值。
  • 圖像處理之RGB轉Ycbcr or gray
    Y'和Y是不同的,而Y就是所謂的流明(luminance),表示光的濃度且為非線性,使用伽馬修正(gamma correction)編碼處理                                                   rgb原圖matlab 源碼:clear all;close all;clc
  • RGB與CMYK的色彩轉換公式
    RGB與CMYK的色彩轉換RGB and CMYK Color Space ConversionRGB和CMYK顏色空間轉換用於將顏色表示從一個顏色空間轉換到另一個顏色空間下面的公式用於RGB到CMYK顏色空間的轉換。RGB值從0到255,CMYK值從0到1。
  • 計算機等級考試詳解:十進位數92轉換為二進位數!
    計算機等級考試詳解:十進位數92轉換為二進位數!本經驗由宗龍龍原創,全文共1000多字,閱讀需要14分鐘,如果文中存在錯誤,還請大家多多指點,我會積極改進的!14、十進位數92轉換為二進位數是()。A)01011100B)01101100C)10101011D)01011000(圖片來源於網絡)這一題主要考察的是十進位與二進位的相互轉換問題。如果你不知道如何轉換,沒有關係,我們只需要打開pc電腦端的計算器便可以輕鬆的進行十進位與二進位之間的轉換。
  • AI 圖像智能修復老照片,效果驚豔到我了!| 附代碼
    用戶需指定需要修復的區域,算法將待修補的區域邊界的等值線外部的信息沿輪廓法向擴散到中間待修補的象素上。該算法利用局部顏色的光滑度沿著等值線擴散,考慮了各向異性的擴散,以保證邊緣處的邊界連續,但該方法計算不穩定。
  • 16進位顏色表示與RGB色彩模型——零基礎自學網頁製作
    說到"進位",大部分沒有數學基礎的小夥伴會比較陌生,如果您是計算機愛好者,也會對"二進位"耳熟能詳。如果想了解16進位,還需要從我們最常用的10進位說起。10進位的意思,通俗來說就是數數到10就要向前進一位。比如9完了之後是10,11.....如果這樣看您還是不知所云,請看下面講解。
  • 高斯濾波器詳解
    這樣,將各個位置的坐標帶入到高斯函數中,得到的值就是模板的係數。於是可以得到如下結論:σσ越大,分布越分散,各部分比重差別不大,於是生成的模板各元素值差別不大,類似於平均模板;σσ越小,分布越集中,中間部分所佔比重遠遠高於其他部分,反映到高斯模板上就是中心元素值遠遠大於其他元素值,於是自然而然就相當於中間值得點運算
  • 圖解css表示顏色的4種方式:顏色名稱、十六進位值、rgb和hsl函數
    今天我們就來講解一下css中4種基本的表示顏色的方式,它們分別是:顏色的英文名稱、十六進位顏色值、rgb顏色函數和hsl顏色函數。1.圖2 十六進位表示的部分顏色3. rgb顏色函數rgb顏色函數和十六進位顏色值原理是相同的
  • 用Python將微信熱文轉換成Word文檔 | 神級操作
    不得不說微信公眾號已經成為了一個開放平臺,每天數以萬計的微信公眾號文章在這產生,我們關注一個微信公眾號每天便可以看到新的文章,我們同時也不知不覺的將好的文章分享到給朋友。那麼如何保存一個好的文章呢?普遍選擇收藏,然而在這裡,我提供一個更巧妙的方法,直接轉換成word文檔保存在電腦裡面。
  • 詳解由MOS管、變壓器搭建的逆變器電路及其製作過程
    逆變器,別稱為變流器、反流器,是一種可將直流電轉換為交流電的器件,由逆變橋、邏輯控制、濾波電路三大部分組成,主要包括輸入接口、電壓啟動迴路、MOS開關管、PWM控制器、直流變換迴路、反饋迴路、LC振蕩及輸出迴路