PhotoShop 光影魔術手補光的原理

2021-08-27 17:25:17 字數 4713 閱讀 3222

[size=large]之前經常使用光影魔術手3的補光操作,那麼,其補光的原理是什麼呢?

老規矩,先上[color=red]結論[/color]:

[color=blue]    光影魔術手的補光相當於調整曲線操作,曲線對映關係如下:[/color][/size]

[img]

[size=large][color=blue]連續補光兩次[/color],曲線如下:[/size]

[img]

[size=large]有時,我會[color=blue]先補光兩次,再調整一下gamma值[/color],其曲線如下:[/size]

[img]

[color=blue][size=large]附上補光的對映表的matlab函式封裝:[/size][/color]

function y=buguangtable(x)

% 光影魔術手的補光對映表

% input:

% x: 整數,x \in [0, 255]

% output:

% y:整數,y \in [0, 255]

y_uint8=[0,2,3,5,6,8,10,11,13,14,16,18,19,21,22,23,25,27,28,30,31,32,33,35,36,38,39,41,42,44,45,46,47,49,51,52,53,55,56,57,59,60,62,63,64,65,67,68,70,71,71,73,75,76,77,78,79,81,82,83,84,86,87,88,89,91,92,93,94,95,97,98,99,100,101,102,104,105,106,107,109,109,110,112,113,114,115,116,117,118,120,120,122,123,124,125,126,127,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,142,144,145,145,146,147,148,149,150,151,152,153,154,155,156,156,157,158,159,160,161,162,163,164,164,166,166,167,168,169,170,171,171,173,173,174,175,176,176,178,178,179,180,181,181,182,182,183,183,184,185,185,186,186,187,188,188,189,190,190,191,192,192,193,193,194,195,195,196,197,197,198,199,199,200,201,201,202,203,203,204,205,205,206,207,207,208,209,210,210,211,212,213,213,214,215,215,216,217,218,218,219,220,221,222,222,223,224,225,226,227,227,228,229,230,231,231,232,233,234,235,236,237,238,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,255];

y=y_uint8(x+1);

end

[color=blue][size=large]% 測試光影魔術手補光的響應曲線[/size][/color]

%%生成測試影象

imr1=0:255;

imr2=[1:255 0];

imr3=255:-1:0;

im=[imr1; imr1; imr2;imr2; imr3;imr3];

im=uint8(im);

imwrite(im,'gray.bmp'); %為了保證畫素值不因為jpg的壓縮而改變,這裡使用bmp格式

%% 驗證光影魔術手的補光操作只是乙個灰度對映操作;

%需要先用 光影魔術手對'gray.bmp'補光後存為'graydisposed.bmp'

imdisposed=imread('graydisposed.bmp');

imdg=imdisposed(:,:,1);

all(imdg(1,:)==imdg(2,:))

all(imdg(3,:)==imdg(4,:))

all(imdg(5,:)==imdg(6,:))

all(imdg(2,:)==[imdg(3,end) imdg(3,1:end-1)])

r2equal_r5=all(imdg(2,:)==imdg(5,end:-1:1) )

%% 繪製光影魔術手補光的響應曲線

modename='光影魔術手補光';

x=linspace(0,1,256);

y_uint8=imdg(1,:);

y=double(y_uint8)/255;

figure1 = figure;

axes1 = axes('parent',figure1,'ytick',0:.1:1,'xtick',0:.1:1,...

'plotboxaspectratio',[1 1 1],...

'dataaspectratio',[1 1 1]);

% xlim(axes1,[0 1]);

% ylim(axes1,[0 1]);

grid on

box(axes1,'on');

hold(axes1,'all');

plot(x,y,'parent',axes1,'linewidth',3,'color',[1 0 0], 'displayname',modename);

plot(x,x,'parent',axes1,'linewidth',2,'linestyle','--', 'displayname','正常模式');

xlabel('補光前的灰度值','fontsize',16);

ylabel('補光後的灰度值','fontsize',16);

title([modename ' 響應曲線'],'fontsize',16);

legend1 = legend(axes1,'show');

set(legend1,'location','southeast');

% clear all

%%modename='光影魔術手補光2次';

x=linspace(0,1,256);

y=buguangtable(buguangtable(0:255))/255;

figure1 = figure;

axes1 = axes('parent',figure1,'ytick',0:.1:1,'xtick',0:.1:1,...

'plotboxaspectratio',[1 1 1],...

'dataaspectratio',[1 1 1]);

% xlim(axes1,[0 1]);

% ylim(axes1,[0 1]);

grid on

box(axes1,'on');

hold(axes1,'all');

plot(x,y,'parent',axes1,'linewidth',3,'color',[1 0 0], 'displayname',modename);

plot(x,x,'parent',axes1,'linewidth',2,'linestyle','--', 'displayname','正常模式');

xlabel('補光前的灰度值','fontsize',16);

ylabel('補光後的灰度值','fontsize',16);

title([modename ' 響應曲線'],'fontsize',16);

legend1 = legend(axes1,'show');

set(legend1,'location','southeast');

%%modename='補光2次, 引數為1.2的gamma校正一次';

x=linspace(0,1,256);

y=buguangtable(buguangtable(0:255))/255;

% y=buguangtable(0:255)/255;

y=y.^1.2;

figure1 = figure;

axes1 = axes('parent',figure1,'ytick',0:.1:1,'xtick',0:.1:1,...

'plotboxaspectratio',[1 1 1],...

'dataaspectratio',[1 1 1]);

% xlim(axes1,[0 1]);

% ylim(axes1,[0 1]);

grid on

box(axes1,'on');

hold(axes1,'all');

plot(x,y,'parent',axes1,'linewidth',3,'color',[1 0 0], 'displayname',modename);

plot(x,x,'parent',axes1,'linewidth',2,'linestyle','--', 'displayname','正常模式');

xlabel('補光前的灰度值','fontsize',16);

ylabel('補光後的灰度值','fontsize',16);

title([ modename ' 響應曲線'],'fontsize',16);

legend1 = legend(axes1,'show');

set(legend1,'location','southeast');

漫水填充及Photoshop中魔術棒選擇工具的實現

今天寫程式中有乙個地方用到了漫水填充 floodfill 所謂漫水填充,簡單來說,如下圖中左圖,白布上有一塊紅色的斑點,在這個紅色的斑點上點一下,就自動選中了和該點相連的紅色的區域,接著將該區域替換成指定的顏色,如下圖中右圖所示。gdi中有乙個函式 extfloodfill 可以用於漫水填充。函式原...

漫水填充及Photoshop中魔術棒選擇工具的實現

今天寫程式中有乙個地方用到了漫水填充 floodfill 所謂漫水填充,簡單來說,如下圖中左圖,白布上有一塊紅色的斑點,在這個紅色的斑點上點一下,就自動選中了和該點相連的紅色的區域,接著將該區域替換成指定的顏色,如下圖中右圖所示。gdi中有乙個函式 extfloodfill 可以用於漫水填充。函式原...

目標驅動的產品設計(二) 從光影魔術手談起

一 在這樣的乙個領域裡,還有新產品的生存空間麼?像光影魔術手這樣的新一代影象處理軟體正在嘗試尋找答案 不糾纏於ps所擅長的專業的 強大的 自由度極高的影象處理功能,專注於給使用者提供現成的 傻瓜化的影象處理解決方案,比如影樓風格 比如反轉片效果 比如大頭貼 比如去紅眼等等。努力讓使用者在不了解任何影...