簡體   English   中英

圖像的可選顏色

[英]Selective Color of image

我有超過 1 周的時間閱讀有關圖像選擇性顏色變化的信息。 這意味着從顏色選擇器中選擇一種顏色,然后選擇我想要更改顏色的圖像的一部分,並將顏色從原始顏色的更改應用於顏色選擇器的顏色。

例如,如果我在顏色選擇器中選擇了一種藍色並且我還選擇了圖像中的紅色部分,我應該能夠將所有圖像中的紅色更改為藍色。

另一個例子。 如果我有一個帶有紅蘋果和橙子的圖像,並且如果我在圖像上選擇了一個蘋果,並在色標中選擇了一個藍色,那么所有的蘋果都應該將顏色從紅色變為藍色。

我有一些想法,但當然我需要一些關於如何做到這一點的更具體的東西

感謝您閱讀

作為起點,請考慮對圖像的顏色進行聚類。 如果您不知道您想要多少個集群,那么您將需要確定是否合並兩個給定集群的方法。 現在,讓我們假設我們知道這個數字。 例如,給定左邊的下圖,我將其顏色映射到 3 個簇,它們的平均顏色如中間所示,並用每個簇的平均顏色表示右圖。

在此處輸入圖片說明在此處輸入圖片說明在此處輸入圖片說明

輸出正確,現在您需要的是一種替換顏色的方法。 假設用戶單擊(單個點)圖像中的某個位置,那么您就知道原始圖像中需要修改的位置。 對於下一個圖像,用戶(我)單擊了“橙色”集群包含的一個點。 然后他點擊了一些藍色調。 從中,您可以制作一個表示“橙色”集群中點的掩碼並使用它。 我考慮了一個簡單的高斯濾波器,然后是一個 3x5 的平面擴張。 然后根據生成的掩碼替換原始圖像中的色調(低通濾波后,其上的值也被視為合成圖像的 alpha 值)。

在此處輸入圖片說明

一點也不完美,但你可以有一個比我更好的聚類,還有一個不那么原始的顏色替換方法。 我故意跳過了關於聚類方法、顏色空間等的細節,因為我只在 RGB 上使用了基本的 k 均值,而沒有對輸入進行任何預處理。 因此,您可以將上述結果視為您可以做的任何其他事情的基准。

給定圖像、選定的顏色和目標新顏色 - 您不能做很多不難看的事情。 您還需要一個范圍,一些顏色的變化量,因此您可以說一個像素的顏色“足夠接近”,而另一個則明顯“不同”。

處理的第一步:您創建一個蒙版圖像,它是灰度的,從 0.0 到 1.0(或從零到某個最大值,我們將其視為 1.0)變化,並且與輸入圖像的大小相同。 對於每個輸入像素,測試其顏色是否足夠接近所選顏色。 如果它“相同”或“足夠接近”,則將 1.0 放入掩碼中。 如果不同,則輸入 0.0。 如果是邊界線,則放置一個中間值。 究竟如何做到這一點取決於圖像的細節。

這可能在 LAB 空間中效果最好,並根據 A、B 坐標相對於其原點的角度來測試相同性。

拿到口罩后,把它放在一邊。 現在對整個圖像進行顏色變換。 這可能最好在 HSV 空間中完成。 請勿觸摸 V 通道。 向 S 添加一個常數,以 360deg 為模(或 mod 256,如果 S 存儲為字節)並將 S 乘以選定的常數,以便將 HSV 中對應於所選顏色的坐標移動到目標顏色的 HSV 坐標。 將變換后的 S 和 H(L 不變)轉換回 RGB。

最后,使用蒙版將原始圖像與顏色轉換后的圖像混合。 將此應用於每個通道 - 紅色、綠色、藍色:

output = (1-mask)*original + mask*transformed

如果您在字節數組中進行所有操作,則 0 為 0.0,255 為 1.0,並注意溢出和有符號/無符號問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM