[size=x-large][color=blue]1、繪製色盤[/color][/size]
**統一放到最後。
結果如下
[img]
[color=blue][size=x-large]2、色調(hue)混合模式[/size][/color]
葉明大神的用色調混合模式降低某一色彩的飽和度的文章:[url]
主要步驟為,新建乙個待降低飽和度的色彩的圖層,反相,圖層混合模式改為色相,圖層不透明度改為50%以下。
除了色調模式外此外,單色圖層單色圖層還可以使用以下混合模式[url]
[list]
[*]正片疊底:給高光部分著色
[*]濾色: 給陰影部分著色
[*]柔光: 整體著色,但比正常模式柔和
[/list]
色調混合模式使用混合色的色調、基色的飽和度和明度。
但是,,,,ps中的色調混合模式不完全是這樣的。。。
這裡有個別人實現的結果與ps做對比,可以發現ps中優化了不少![url]
本文僅從理論上簡單做個理論驗證。
使用的公式是
xb=x*opacity+(1-opacity)*xs;
yb=y*opacity+(1-opacity)*ys;
也就是把乙個顏色中的色調、飽和度當做乙個二維向量根據不透明度加權求和。
這麼一來,飽和度也是要變的!!(ps中也會變)應該是合成向量所示的飽和度再乘以基色的飽和度。(這個沒實現。)
不透明度為0.5時的一組使用色調混合模式引起的色彩偏移如下圖所示:
[img]
**:
function [colordiskrgbimage,x,y]=lccolourdisk(r)
% 生成色盤影象
%r: 色盤半徑-0.5。即色盤直徑為2r+1
%輸出:
%colordiskrgbimage 色盤影象,為(2r+1)*(2r+1)大小的。
%x:與色盤影象大小一樣,對應於色盤影象中每個畫素的x座標。
%y::與色盤影象大小一樣,對應於色盤影象中每個畫素的y座標。
if(nargin==0)
r=400;
end%生成座標網格
x=-r:r;
x=x/r;%歸一化到區間[-1,1]
y=x;
[x,y]=meshgrid(x,y);
%生成hue
theta=atan2(y,x);
theta(theta<0)=theta(theta<0)+2*pi;
hue=theta/2/pi;
%生成saturation
saturation=sqrt(x.^2+y.^2);
saturation(saturation>1)=0;%將位於色盤外的部分設定成沒有顏色
%生成value
value=ones(size(x));
imhsv=cat(3,hue,saturation,value);
colordiskrgbimage=hsv2rgb(imhsv);
if(nargout==0)
colordiskrgbimage=flipud(colordiskrgbimage); %注意matlab中y軸方向朝下,與一般情況不同,所以要翻轉一下y座標。
imshow(colordiskrgbimage);
endend
function blendhue(huetoblend,opacity,colordisk,x,y,npoints)
%繪製色調混合模式下的色彩偏移影象
%huetoblend: 混合色色調,[0,1]
%opacity: 混合色的不透明度
%colordisk,x,y 為lccolourdisk的輸出
%npoints: 基色的點數
d=size(colordisk,1);
r=floor(d/2);
center=ceil(d/2);
theta=huetoblend*2*pi;
thetas=linspace(0,2*pi,npoints);%選n個點作為基色
% thetadiff=thetas-theta;
% thetadiff(thetadiff<0)=thetadiff(thetadiff<0)+2*pi;
% thetadiff(thetadiff>pi)=thetadiff(thetadiff>pi)-2*pi; %保證角度在[-pi, pi]之間
% thetasblended=theta+thetadiff*(1-opacity);
% factor=1;
[x y]=theta2xy(theta,center,r);
[xs ys]=theta2xy(thetas,center,r);
xb=x*opacity+(1-opacity)*xs;
yb=y*opacity+(1-opacity)*ys;
imshow(colordisk);
hold on
plot(x,y,'ok')
%quiver(center,center,xh-center,yh-center,0,'k');
plot(xs,ys,'*k')
plot(xb,yb,'pk');
quiver(xs,ys,xb-xs,yb-ys,0,'k');
legend('混合色','基色','結果色')
t=['色調混合模式下混色結果:opcacity=' num2str(opacity)];
title(t)
axis xy %設定座標軸y方向從下到上!!
endfunction [x,y]=theta2xy(theta,center,r)
x=center+r*cos(theta);
y=center+r*sin(theta);
end
%hue混合模式繪圖的入口程式
close all
[colordisk,x,y]=lccolourdisk(400);
huetoblend=0;
opacity=0.5;
npoints=21;
blendhue(huetoblend,opacity,colordisk,x,y,npoints)
從RGB色轉為灰度色演算法
一 基礎 對於彩色轉灰度,有乙個很著名的心理學公式 gray r 0.299 g 0.587 b 0.114 二 整數演算法 而實際應用時,希望避免低速的浮點運算,所以需要整數演算法。注意到係數都是3位精度的沒有,我們可以將它們縮放1000倍來實現整數運算演算法 gray r 299 g 587 b...
雙色 三色排序問題
實現乙個函式,給定乙個陣列,要求使得陣列中負數在所有正數的前面 實現乙個函式,給定乙個陣列,要求使得陣列中負數在前正數在後零在中間 1 include2 include34 輸出陣列元素 5void print int arr,int len 6 交換兩個數 7void swap int left,...
Arduino使用三色 雙色LED
1 三色led 然後是這兩種led的實物圖,上搜了一下,這種三色led,有乙個gnd引腳的好像叫做共陰rgb全彩led發光二極體,總共有四個引腳 gnd引腳接arduino的gnd引腳,r g b三個引腳分別對應著red green blue,這三個引腳應該接arduino中的模擬引腳。顯示三色的原...