Susan﹏汪汪 2017-2-5 19:15
練習[code]public func LanczosResampling<T: SDTransformProtocol>(_ source: [Float], _ s_width: Int, _ a: Int, _ width: Int, _ height: Int, _ transform: T) -> [Float] {
func _kernel(_ x: Float) -> Float {
let a = Float(a)
if x == 0 {
return 1
}
if x < -a {
return 0
}
if x < a {
let _x = Float.pi * x
return a * sin(_x) * sin(_x / a) / (_x * _x)
}
return 0
}
var result = [Float](repeating: 0, count: width * height)
let s_height = source.count / s_width
let _transform = transform.inverse
for i in 0..<result.count {
let p1 = Point(x: i % width, y: i / width) * _transform
var s: Float = 0
var t: Float = 0
let min_x = Int(p1.x) - a + 1
let max_x = Int(p1.x) + a
let min_y = Int(p1.y) - a + 1
let max_y = Int(p1.y) + a
for y in min_y...max_y where (0..<s_height).contains(y) {
let _y = y * s_width
for x in min_x...max_x where (0..<s_width).contains(x) {
let l = _kernel(Float((p1 - Point(x: x, y: y)).magnitude))
s += source[x + _y] * l
t += l
}
}
result[i] = s / t
}
return result
}[/code]
sswroom 2017-2-6 14:14
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-5 07:15 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455889829&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
練習public func LanczosResampling(_ source: , _ s_width: Int, _ a: Int, _ width: Int, _ height: Int, _ transform: T) -> {
func _kernel(_ x: Float) -> Float {
let a = Float(a)
... [/quote]邊位和角位的Pixel有Undersampling的問題, 一般是用Repeating sample來解決, 而不是Skip Sampling
這句Float((p1 - Point(x: x, y: y)).magnitude)不肯定有沒有問題
你是用2D Lanczos Resampling, 跟一般常用的Bidirectional Lanczos Resampling不同, 速度會較慢
Susan﹏汪汪 2017-2-6 14:48
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 02:14 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455931866&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
這句Float((p1 - Point(x: x, y: y)).magnitude)不肯定有沒有問題
[/quote]wiki條式係咁[img]https://wikimedia.org/api/rest_v1/media/math/render/svg/72c75a9ff84381b88606ea7855818585d2e73a03[/img]
Susan﹏汪汪 2017-2-6 14:50
不過依然唔知邊個位計錯
應該跟足左條式
sswroom 2017-2-6 15:50
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 02:50 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455933776&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
不過依然唔知邊個位計錯
應該跟足左條式 [/quote]不太明白有甚麼問題......
Susan﹏汪汪 2017-2-6 16:00
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 03:50 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455936617&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
不太明白有甚麼問題...... [/quote]
有冇軟件計汪汪張圖?
sswroom 2017-2-6 16:43
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 04:00 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455937083&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
有冇軟件計汪汪張圖? [/quote]差不多全部程式都是用Bi-directional Lanczos Resampler, 不是用2D Lanczos Resampler, 所以結果會不一樣.....
Susan﹏汪汪 2017-2-6 16:50
Ringing 好嚴重
Susan﹏汪汪 2017-2-6 16:53
Linear Interpolate
[attach]6477766[/attach]Cosine Interpolate
[attach]6477765[/attach]
sswroom 2017-2-6 17:17
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 04:50 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455939405&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
Ringing 好嚴重 [/quote]之前直接在Browser Drag and Drop開張圖片, 顏色變很怪.....
Susan﹏汪汪 2017-2-6 18:04
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 05:17 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455940579&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
之前直接在Browser Drag and Drop開張圖片, 顏色變很怪..... [/quote]
你張圖都仲係啞左色
但你個ringing冇汪汪果個咁嚴重
可能汪汪真係計錯?
Susan﹏汪汪 2017-2-6 18:07
bicubic
Susan﹏汪汪 2017-2-6 18:32
今日寫的算法都係呢到
https://github.com/SusanDoggie/Doggie/blob/master/Sources/Doggie/Image/Image.swift
Interpolate function係呢到(以前研究音樂時寫的)
https://github.com/SusanDoggie/Doggie/blob/master/Sources/Doggie/Maths/Maths.swift
基本上全部算法用GPU寫都冇難度
Lanczos sampling唔清楚有冇計算錯
如果冇錯的話用GPU寫lanczos的難度同寫linear完全冇分別(只係換個kernel 而已)
[[i] 本帖最後由 Susan﹏汪汪 於 2017-2-6 06:35 PM [url=http://www.discuss.com.hk/iphone][img=100,23]http://i.discuss.com.hk/d/images/r10/iphoneD.jpg [/img][/url] 編輯 [/i]]
Susan﹏汪汪 2017-2-6 18:43
話說
Swift 如果有做specialize的話
速度可以快超過5倍
[url=https://github.com/SusanDoggie/Doggie/commit/1265a1837183f17e21ff920b55dac66c9b2514e4]https://github.com/SusanDoggie/Doggie/commit/1265a1837183f17e21ff920b55dac66c9b2514e4[/url]
基本上冇乜特別做優化
計算上面堆圖(1000px * 1000px)的時間分別
linear: 0.9秒
cosine: 0.9秒
cubic: 1.1秒
lanczos 3: 2.7秒
sswroom 2017-2-6 19:02
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 06:04 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455942656&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
你張圖都仲係啞左色
但你個ringing冇汪汪果個咁嚴重
可能汪汪真係計錯? [/quote]
是Browser問題...... 我用Photoshop和其他Support Color Management的Viewer看也沒有「啞左色」, 檔案內有標籤成sRGB Colorspace, 可能是Browser不Support
我是用Bi-directional Lanczos Resampling (Linear Sampling), 所以速度比較快, 全CPU Resize, 1920x1080 -> 3840x2160, 時間少於0.017秒 (1/60秒), 用Quad-channel RAM的電腦可以更快
Susan﹏汪汪 2017-2-6 19:16
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 07:02 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455945071&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
是Browser問題...... 我用Photoshop和其他Support Color Management的Viewer看也沒有「啞左色」, 檔案內有標籤成sRGB Colorspace, 可能是Browser不Support
我是用Bi-directional Lanczos Resampling (Linear Sa ... [/quote]
呢幾日如果得閒就挑戰0.017秒
sswroom 2017-2-6 19:29
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 07:16 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455945612&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
呢幾日如果得閒就挑戰0.017秒 [/quote]我的0.017秒是包括Inverse Gamma, Forward Gamma等時間 (因為是用Linear Sampling方式)
實際上還包括Video Decoding 和Image Presentation等時間.......
要大量的Optimization才有可能提升至這個速度
Susan﹏汪汪 2017-2-6 19:40
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 07:29 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455946105&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
我的0.017秒是包括Inverse Gamma, Forward Gamma等時間 (因為是用Linear Sampling方式)
實際上還包括Video Decoding 和Image Presentation等時間.......
要大量的Optimization才有可能提升至這個速度 [/quote]
放心
冇記錯汪汪部電腦的spec應該差過你果部好多
sswroom 2017-2-6 20:51
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-6 07:40 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=455946525&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
放心
冇記錯汪汪部電腦的spec應該差過你果部好多 [/quote]我現時Optimize到Bottleneck是RAM Bandwidth, 用Dual-Channel DDR4已經可以快過我的電腦 (我的是Dual-Channel DDR3, Bandwidth約是18GB/s)
Susan﹏汪汪 2017-2-6 21:10
[quote]原帖由 [i]sswroom[/i] 於 2017-2-6 08:51 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=455949771&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
我現時Optimize到Bottleneck是RAM Bandwidth, 用Dual-Channel DDR4已經可以快過我的電腦 (我的是Dual-Channel DDR3, Bandwidth約是18GB/s) [/quote]
汪汪部電腦8 GB 1600 MHz DDR3
Susan﹏汪汪 2017-2-7 12:39
搬左looping到@_specialize裡面
[url=https://github.com/SusanDoggie/Doggie/commit/095fe7ef86446d2983ea9b2b44802723063fc726]https://github.com/SusanDoggie/Doggie/commit/095fe7ef86446d2983ea9b2b44802723063fc726[/url]
時間提升到
nearest neighbor: 0.028126
linear: 0.116269
cosine: 0.137315
cubic: 0.349245
lanczos 3: 1.945959
Susan﹏汪汪 2017-2-7 17:51
mitchell 1/3 1/3
Susan﹏汪汪 2017-2-15 10:44
nearest neighbor由0.024秒再提升到0.010秒
整數除法影響力好大
[url=https://github.com/SusanDoggie/Doggie/commit/354398b93d5222be181dcad078d2a121e6d2d97a]https://github.com/SusanDoggie/Doggie/commit/354398b93d5222be181dcad078d2a121e6d2d97a[/url]
sswroom 2017-2-18 02:45
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-15 10:44 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=456423496&ptid=26426434][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
nearest neighbor由0.024秒再提升到0.010秒
整數除法影響力好大
[url=https://github.com/SusanDoggie/Doggie/commit/354398b93d5222be181dcad078d2a121e6d2d97a]https://github.com/SusanDoggie/Doggie/commit/354398b93d5222be181dcad078d2a121e6d2d97a[/url] [/quote]請問你的時間是由甚麼解像度Resize至甚麼解像度呢?
我剛剛試寫一個Nearest Neighbour,
1920x1080x32bpp -> 3840x2160x32bpp, 平均大約用0.0085秒。 用乘數有Floating Point Rounding Error問題, 所以主要用加數來計算位置
煙民母親生賤種
*** 作者被禁止或刪除 內容自動屏蔽 ***
Susan﹏汪汪 2017-2-18 07:50
[quote]原帖由 [i]sswroom[/i] 於 2017-2-18 02:45 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=456584188&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
請問你的時間是由甚麼解像度Resize至甚麼解像度呢?
我剛剛試寫一個Nearest Neighbour,
1920x1080x32bpp -> 3840x2160x32bpp, 平均大約用0.0085秒。 用乘數有Floating Point Rounding Error問題, 所以主要用加數來 ... [/quote]
一直都係前面張圖
太多野做、只係間唔中update 下
加數好提議
[[i] 本帖最後由 Susan﹏汪汪 於 2017-2-18 07:58 AM [url=http://www.discuss.com.hk/iphone][img=100,23]http://i.discuss.com.hk/d/images/r10/iphoneD.jpg [/img][/url] 編輯 [/i]]
Susan﹏汪汪 2017-2-18 07:51
[quote]原帖由 [i]煙民母親生賤種[/i] 於 2017-2-18 03:29 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=456585002&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
用什麼 framework 寫? [/quote]
佢自己寫嘅算法
Susan﹏汪汪 2017-2-18 08:22
[quote]原帖由 [i]sswroom[/i] 於 2017-2-18 02:45 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=456584188&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
請問你的時間是由甚麼解像度Resize至甚麼解像度呢?
我剛剛試寫一個Nearest Neighbour,
1920x1080x32bpp -> 3840x2160x32bpp, 平均大約用0.0085秒。 用乘數有Floating Point Rounding Error問題, 所以主要用加數來 ... [/quote]
[url=https://github.com/SusanDoggie/Doggie/blob/master/Tests/DoggieTests/ImageTest.swift]https://github.com/SusanDoggie/Doggie/blob/master/Tests/DoggieTests/ImageTest.swift[/url]
新的benchmark係呢個
張圖有少少差異、因為之前係用AI隨手畫
但都係兩個圓、一黃一紅
Susan﹏汪汪 2017-2-18 09:45
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-2-18 07:50 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=456587665&ptid=26426434][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
一直都係前面張圖
太多野做、只係間唔中update 下
加數好提議 [/quote]
改左加法後benchmark 結果speed有32% improvement
大約0.007秒
[[i] 本帖最後由 Susan﹏汪汪 於 2017-2-18 09:46 AM [url=http://www.discuss.com.hk/iphone][img=100,23]http://i.discuss.com.hk/d/images/r10/iphoneD.jpg [/img][/url] 編輯 [/i]]
Susan﹏汪汪 2017-2-18 11:03
試左1920x1080 -> 3840x2160
大概係0.07秒