查看完整版本 : white balance

Susan﹏汪汪 2017-12-14 12:54 PM

white balance

原圖
[attach]7675947[/attach]

set左坐標110, 110的像素顏色做白點的結果
[attach]7675948[/attach]

form5 2017-12-14 08:57 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-14 12:54 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472374475&ptid=27121728][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
原圖
7675947

set左坐標110, 110的像素顏色做白點的結果
7675948 [/quote]
條數點計?

Susan﹏汪汪 2017-12-14 09:40 PM

[quote]原帖由 [i]form5[/i] 於 2017-12-14 08:57 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472393620&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

條數點計? [/quote]
一個image除左有像素外、必然會跟一個color space
而color space的白點CIE xyz 本身係絕對坐標系統

所以有兩個做法

1. 直接換左個color space的白點CIE xyz的值

2. 把顏色像素全部轉晒做CIE xyz
然後硬用新白點CIE xyz轉返去原本的color space

汪汪用左第二個做法
因為可以keep到個舊icc檔

===============

簡單講

其實就即係color space 亂set白點的效果

[[i] 本帖最後由 Susan﹏汪汪 於 2017-12-14 09:50 PM 編輯 [/i]]

Susan﹏汪汪 2017-12-14 09:43 PM

https://github.com/SusanDoggie/Doggie/blob/master/Sources/Doggie/Image/Image.swift

setWhiteBalance果個method

m1果個matrix係color space 轉舊CIE xyz
m2係新CIE xyz還原到原本的color space

form5 2017-12-14 10:12 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-14 09:40 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472395274&ptid=27121728][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
一個image除左有像素外、必然會跟一個color space
而color space的白點CIE xyz 本身係絕對坐標系統

所以有兩個做法
1. 直接換左個color space的白點CIE xyz的值

2. 把顏色像素全部轉晒做CIE xyz
然後硬用新白點C ... [/quote]

吾係好明CIE
我當每個点 (x,y )有 r g b ,由0 至 255,
假如
[ 新3x 1 RGB ] = [ 3 x  3  const matrix ] x  [  3 x 1 , 原本 x, y 點上的r g b  matrix]
即係
Const matrix 係咩 value?

Susan﹏汪汪 2017-12-14 10:22 PM

[quote]原帖由 [i]form5[/i] 於 2017-12-14 10:12 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472396523&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]


吾係好明CIE
我當每個点 (x,y )有 r g b ,由0 至 255,
假如
[ 新3x 1 RGB ] = [ 3 x  3  const matrix ] x  [  3 x 1 , 原本 x, y 點上的r g b  matrix]
即係
Const matrix 係咩 value? [/quote]
張相個x,y坐標唔關事

#1講的110, 110只不過係求其攞隻綠色
就算比隻顏色係相入面沒有的都可以

setWhiteBalance的parameter所指的point係CIE xyz色彩空間的坐標
同張相冇關係

Susan﹏汪汪 2017-12-14 10:24 PM

[quote]原帖由 [i]form5[/i] 於 2017-12-14 10:12 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472396523&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]


吾係好明CIE
我當每個点 (x,y )有 r g b ,由0 至 255,
假如
[ 新3x 1 RGB ] = [ 3 x  3  const matrix ] x  [  3 x 1 , 原本 x, y 點上的r g b  matrix]
即係
Const matrix 係咩 value? [/quote]
個matrix乘法都唔係直接乘落RGB到

因為張相不一定係RGB
可能係CMYK

所以要先轉做CIE xyz再乘個matrix

即呢行
buffer.pointee.color = colorSpace.convertFromXYZ(colorSpace.convertToXYZ(buffer.pointee.color) * matrix)

form5 2017-12-14 10:37 PM

I see, 可以直接convert,
https://en.m.wikipedia.org/wiki/Color_balance
可以直接乘某個 matrix, 而個matrix 可以由 某個point 得到

CYMK 係 咩file format?
做white banlace 有咩好處呢?

Susan﹏汪汪 2017-12-14 10:49 PM

[quote]原帖由 [i]form5[/i] 於 2017-12-14 10:37 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472397590&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
I see, 可以直接convert,
https://en.m.wikipedia.org/wiki/Color_balance
可以直接乘某個 matrix, 而個matrix 可以由 某個point 得到

CYMK 係 咩file format?
做white banlace 有咩好處呢? [/quote]
[code]let m1 = colorSpace.base.cieXYZ._intentMatrix(to: CIEXYZColorSpace(white: colorSpace.referenceWhite.point), chromaticAdaptationAlgorithm: colorSpace.chromaticAdaptationAlgorithm, intent: .default)

let m2 = CIEXYZColorSpace(white: white)._intentMatrix(to: colorSpace.base.cieXYZ, chromaticAdaptationAlgorithm: colorSpace.chromaticAdaptationAlgorithm, intent: .default)[/code]

Wiki條link裡面的matrix就是個chromaticAdaptationAlgorithm

https://github.com/SusanDoggie/Doggie/blob/master/Sources/Doggie/ColorSpace/ChromaticAdaptationAlgorithm.swift

分別計左m1同m2出來
m1係代表color space轉換舊白點CIE xyz算法
m2代表新白點CIE xyz轉換到原來的colo space的算法

因為係格硬把新白點取代舊白點
所以就是直接m1 * m2就可

=============

CMYK存點陣圖可以用TIFF
TIFF支援任何color space
例如PANTONE hexachrome都可以

不過常見軟件只識讀RGB、CMYK、CIE Lab同CIE xyz

=============

汪汪寫呢個white balance 只不過係因為琴晚諗起
所以就順手寫

Susan﹏汪汪 2017-12-14 11:00 PM

[quote]原帖由 [i]form5[/i] 於 2017-12-14 10:37 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472397590&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
I see, 可以直接convert,
https://en.m.wikipedia.org/wiki/Color_balance
可以直接乘某個 matrix, 而個matrix 可以由 某個point 得到

CYMK 係 咩file format?
做white banlace 有咩好處呢? [/quote]
要講做white banlace 有咩好處

最直接係如果張照片係燈泡環境影出來
好多時相機冇事先較白平衡的話會徧黃徧橙

不論係相機事先較好
還是影完相事後再調較

都一樣方法較白平衡

form5 2017-12-14 11:00 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-14 10:49 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472398130&ptid=27121728][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

let m1 = colorSpace.base.cieXYZ._intentMatrix(to: CIEXYZColorSpace(white: colorSpace.referenceWhite.point), chromaticAdaptationAlgorithm: colorSpace.chromaticAdaptationAlgorithm, intent: .default)

l ... [/quote]
I see

sswroom 2017-12-15 10:13 AM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-14 11:00 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472398650&ptid=27121728][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

要講做white banlace 有咩好處

最直接係如果張照片係燈泡環境影出來
好多時相機冇事先較白平衡的話會徧黃徧橙

不論係相機事先較好
還是影完相事後再調較

都一樣方法較白平衡 [/quote]
相機的白平衡(包括影完相再調校), 一般是兩個Parameters: Colour Temperature, Hue, 不是用選白點的....
詳細是甚麼算法, 要看看Adobe DNG SDK的Source Code才會知道...

Susan﹏汪汪 2017-12-15 10:41 AM

[quote]原帖由 [i]sswroom[/i] 於 2017-12-15 10:13 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472411520&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

相機的白平衡(包括影完相再調校), 一般是兩個Parameters: Colour Temperature, Hue, 不是用選白點的....
詳細是甚麼算法, 要看看Adobe DNG SDK的Source Code才會知道... [/quote]
一樣的
代返入Planckian locus就得到白點坐標

Susan﹏汪汪 2017-12-15 11:01 AM

[quote]原帖由 [i]sswroom[/i] 於 2017-12-15 10:13 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472411520&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]

相機的白平衡(包括影完相再調校), 一般是兩個Parameters: Colour Temperature, Hue, 不是用選白點的....
詳細是甚麼算法, 要看看Adobe DNG SDK的Source Code才會知道... [/quote]
相機正常應該係只有Temperature可以選
或者用灰卡

未見過調整hue

===========

用灰卡去set白平衡
就是汪汪直接攞圖中間像素顏色的CIE xyz的做法

[[i] 本帖最後由 Susan﹏汪汪 於 2017-12-15 11:03 AM 編輯 [/i]]

sswroom 2017-12-15 11:17 AM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-15 11:01 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472413436&ptid=27121728][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

相機正常應該係只有Temperature可以選
或者用灰卡

未見過調整hue

===========

用灰卡去set白平衡
就是汪汪直接攞圖中間像素顏色的CIE xyz的做法 [/quote]剛剛查了一下, Photoshop是用Color Temperature + Hue來做白平衡
而相機(Canon, Panasonic和Pentax)是用Color Temperature + 2-axis Offset來做白平衡, 2-axis是A/B Axis和G/M Axis

Susan﹏汪汪 2017-12-15 11:36 AM

[quote]原帖由 [i]sswroom[/i] 於 2017-12-15 11:17 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472414139&ptid=27121728][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
剛剛查了一下, Photoshop是用Color Temperature + Hue來做白平衡
而相機(Canon, Panasonic和Pentax)是用Color Temperature + 2-axis Offset來做白平衡, 2-axis是A/B Axis和G/M Axis [/quote]
Temperature係代入Planckian locus
但Planckian locus只係CIE xyz上的一條線

正確白點未必準確落正係曲線上
就可以用Hue移出曲線去到白點位置

用Temperature去表示會通俗好多
一般用家理解Temperature容易過講cie xyz

所以就算可以直接用x, y坐標就定到白點位置
也都會換成Temperature來說明

Susan﹏汪汪 2017-12-15 04:19 PM

[code]do {
   
    let context = ImageContext<ARGB32ColorPixel>(width: 500, height: 500, colorSpace: .sRGB)
   
    context.setClip(shape: .Ellipse(x: 250, y: 250, radius: 250), winding: .nonZero)
   
    context.beginTransparencyLayer()
   
    context.withUnsafeMutableImageBufferPointer {
        
        guard var pointer = $0.baseAddress else { return }
        
        for y in 0..<500 {
            for x in 0..<500 {
                pointer.pointee = ARGB32ColorPixel(color: RGBColorModel(hue: round(atan2(Double(y - 250), Double(x - 250)) * 0.5 / Double.pi * 12) / 12, saturation: 0.1, brightness: 1), opacity: 1)
                pointer += 1
            }
        }
    }
   
    context.endTransparencyLayer()
   
    context.draw(shape: .Ellipse(x: 250, y: 250, radius: 125), winding: .nonZero, color: .white)
   
    try contex>>><<<age.representation(using: .png, properties: [:])?.write(to: URL(fileURLWithPath: "/Users/Susan/Desktop/white balance/origin.png"))
   
}

for i in 0..<12 {
   
    var image = try AnyImage(data: Data(contentsOf: URL(fileURLWithPath: "/Users/Susan/Desktop/white balance/origin.png")))
   
    let angle = Double(i) / 12 * 2 * Double.pi
   
    let point = Point(magnitude: 187.5, phase: angle)
   
    let color = image[Int(point.x + 250), Int(point.y + 250)]
   
    image.setWhiteBalance(color.convert(to: ColorSpace.cieXYZ(white: image.colorSpace.cieXYZ.referenceWhite.point)).color.point)
   
    try image.representation(using: .png, properties: [:])?.write(to: URL(fileURLWithPath: "/Users/Susan/Desktop/white balance/white balance \(i).png"))
}[/code]順時針方向一個個色塊變灰
頁: [1]
查看完整版本: white balance