翹首以盼的抗鋸齒

Antialiasing

實際的圖形學中是怎么實現反走樣的呢?

我們不希望實際產出的圖形有鋸齒效果,那怎么辦呢?

06fdde0120ff4b10b8382294479640bc.png

從采樣的理論開始談起吧?

Simpling theory

照片也是一種采樣,把景象打散成像素放到屏幕上的過程:

9952d87c436040e4ac2145087fd29437.png

還可以在不同的時間(視頻):

272da95e35814a6c97b3e1f3bf009cfc.png

?動畫是定義在幀數上的

一個專業術語:Artifacts(瑕疵)

采樣會產生很多問題,一個是鋸齒:

b50e8204e72241589ddf39bd76711e93.png

還有問題比如說摩爾紋:

dc1451b6590e4724ae9dc31f87a8d43c.png

它怎么產生的呢?

?比如說把左邊的奇數行奇數列都去掉變成小圖,顯示成和大圖一樣大,就能看到摩爾紋了(拿手機拍電腦顯示器)

還有一種有意思的叫車輪效應,也是采樣中出現的問題,比如人肉眼的采樣速度跟不上高速旋轉的物體:

6b3c2dc4fdd54addaa0c21deb03de848.png

我們如何反走樣呢?

在采樣之前做一個模糊(濾波),做一個模糊再采樣就可以反走樣:

?2b257c213daf49a287aa0bdef6a6e06a.png

d6d6b0f41c144d05adb178c102df534c.png

注意順序是不能顛倒的,要先模糊再采樣,如果先采樣再模糊就變成了Blurred Aliasing:

9cd27af2f07e497696799203b1013178.png?那為什么采樣的速度跟不上信號變換的速度就會走樣?

Antialiasing in practice

Frequency Domain

先來看看頻率吧:

f9c0fb9ce108460cb893a0a58b975e2c.png

調整前面的系數會得到不同的余弦波(頻率不同)?

介紹正余弦波:

d3920e2a7baf465596ee1c2fcff63bda.png

為了介紹傅里葉級數展開(任何周期函數可以將其寫成正余弦函數的線性組合)

還有個東西叫傅里葉變換:

c99a0ff7c92a414c8ed2b777bca86891.png

傅里葉變換:把函數變成不同頻率的段并且顯示出來:

64b12b35bb8d49e09c9f9bcfd6df205a.png?采樣還原出的函數在不同頻率下有出入,走樣本質是信號變化的太快導致采樣跟不上

?時域相乘,頻域卷積,必須要到達兩倍才不會走樣

b0a8b08442f54108a4acebe365c71520.png

上面的結果就是采樣兩種頻率完全不同的信號但是采樣結果完全一樣!

?這就是走樣。

Filtering

把某個特定的頻率給抹掉,說出對應信號如何變化

傅里葉變換就是從時域變到頻域:

27c5158195f94a93ba1afc3a4fb6dcf0.png

?中心把其定義成低頻的區域,周圍全都是高頻的區域,在不同頻率的信息多少通過亮度表示

信息多集中在低頻段

水平和豎直方向有道,我們在分析信號的時候我們會認為它是周期性重復的信號,那么對于不周期性重復的信號怎么辦呢?

比如上圖哪里重復了,并不重復對吧,我們通過右邊界在重復左邊界的內容,在邊界會產生劇烈的變化從而產生極其高的高頻,頭頂位置和衣服下邊緣位置的圖像變化劇烈,導致高頻區域為白色

濾波是去掉一些頻率的內容,把低頻信號抹掉,高頻信號有意義:圖像內容的邊界

687f916495fc4d32a48906e67ab82b10.png

這種濾波叫高通濾波 (通過濾波器使只有高頻的濾波可通過)

為什么高頻信息就對應邊界呢?

是不是變化很劇烈的才叫邊界?

那就是高頻信息呀,我們如果過濾掉高頻只留下低頻呢?

a416f17a78e34218a99add2139b4cddb.png

會發現邊界模糊勒?

還可以做另外的實驗:去掉高頻。去掉低頻,留下中庸之道,就可以提取到一些不是很明顯的邊界特征(中通濾波):

5bc40c182eed4e97bc4f64ee136d0255.png

卷積(Convolution)和濾波有關系,本質是一種點乘:

4fd0d143595e4a59935ee9e013badac8.png

這是要做一個卷積操作(加權平均):

7e46c9f66c2e48ea8a2408679e65e135.png

卷積定理: 時域卷積等于頻域相乘,在時域上的乘積相當于在頻域上的卷積:

29bd8929930c46a7b94e535ed931c9dc.png

1d14176bfb8242308d5cb929ddcbfa41.png

?卷積操作進行均值模糊,時域的卷積等于頻域的乘積

濾波器本身是一個3×3的盒子,再×eq?%5Cfrac%7B1%7D%7B9%7D是為了不讓圖像整體的顏色值發生變化:

9b8904cab66a459cb8e8d9a423023f8b.png

?上面的例子顯示出的結果是這個盒子是一個低通濾波器

bba02e0dc5b3421994d157bc40680891.png

時域上的一個小格子轉換成頻域,如果盒子在時域上變大了,那在頻域上該如何變化呢?

盒子在時域上變大,反而在頻域上變小:

9702e794d2634d618f186698dd1c44c3.png

?用越大的box做卷積會越來越模糊,如果用一個超級小的box就相當于根本沒有做濾波,也就是說所有東西都被留了下來

采樣是什么?是在重復頻域上的內容(×另外一個函數):

d81836510fa24e6eb20e99457a07a78d.png

根據卷積定理,時域上的乘積對應到頻域上為卷積,時域卷積等于頻域乘積

采樣就是在重復原始信號的頻譜

1、左側一列的中間是一個周期沖激序列,它在t=nT上縱坐標為無窮大,且頻域(右中)仍是一個沖激序列,若用其與原信號相乘進行采樣,采樣的過程就不是讓左邊上中兩圖簡單相乘就行了,它需要再進行一個過程將其轉化為離散時間序列

2、實際采樣時一個常用的辦法是用一個在t=nT上縱坐標為1的采樣序列乘信號源,這樣可以直接得到采樣信號

3、右上和右中卷積得到右下是可證的

為什么會產生走樣就很顯然了:采樣的不同間隔會引起頻譜以另外一個不同的間隔移動:

9bd0dc2fbb574112a7505f961fe3dcdc.png

?采樣不夠快,沖擊函數頻率低,卷積結果頻率低(原始信號和復制粘貼的信號重合在一起了:發生走樣,頻譜搬移發生混合)

提升分辨率走樣就會好很多(進行多的采樣)

Reduce Alising

怎么改善走樣呢?

052ab591386845a6a3458c8b175432f1.png

1.提高分辨率

2.先去模糊再去采樣(模糊:低通濾波):

d1efd7ed0bb74310ae4a4a6b2beb6cb4.png

e4f54afed9644ba3a245dc940106d311.png?那么在實際的操作中,我們采用什么樣的濾波器來進行卷積操作呢?

用一定大小的低通濾波器對其進行卷積:

07b7215b996146199b75bf29815c1954.png

?對像素覆蓋的面積求平均:

27b2b40d0f3a44dd9a40a9bdc27b4d24.png

MSAA?

對更多采樣點進行反走樣(對反走樣的近似,不能嚴格意義上解決反走樣的問題),對大覆蓋的點的近似:

18dc03b1cd43479095ffe36b7e87f78b.png

cc12082c4a31447eadeb2c30359a6d9d.png?

028ba31ba6304e08b10fb8a03bbccfca.png?

d09aa9ffb07049a89b0ae46935f0276f.png?

通過更多的樣本進行反走樣的第一步:模糊

?676864ff15fc47598a13ce2f1ee2020b.png

?MSAA是采樣時提升了計算精度:

df2c91dd8fc449c68941c55ae88b1cd8.png

05a5a744f48c49f1a8a180ae2618a084.png?

通過增大計算量抗鋸齒,還有其他抗鋸齒的方法:FXAA(Fast Approximate AA:替換成沒有鋸齒的邊界)、TAA(Temporal AA:找上一幀的信息)

Tips:Super resolution,超分辨率,把小圖放大看到的全是鋸齒,怎樣把采樣不夠的圖變得沒有鋸齒呢?可以通過深度學習的方法:DLSS(猜測)

Visibility/occlusion

首先需要談的問題就是關于可見性,很直觀的一種想法是先畫遠處的物體,再畫近處的物體(把遠處的物體遮擋住),由遠到近做光柵化:(Painter's Algorithm)畫家算法:

555ac0251ef74c2ab944998019f9a944.png

但是想要定義深度并不簡單,需要光柵化排序:

da204d864e344033ac52f835b911a1b7.png

上面這種復雜的情況在深度上存在互相遮擋的關系,也就沒辦法用親愛的畫家算法,為了解決這個問題,在圖形學中引入了一個概念:Z-Buffering

Z-Buffering

深度緩沖84144df9616640509bd52144d7ada7e6.png

?對三角形的覆蓋關系不好判斷,但是可以面向像素排序,記錄像素離我們比較近的距離

最后得到的結果是要渲染出一幅畫面:

cd2f42a7ce4f4a2b909567eabae90c14.png

這兩幅圖永遠都是同時生成的,那算法在一開始的時候該如何進行呢?

看像素的具體情況,更新最淺深度:

ac623824a9b94441a2f66c1d5443adb1.png

深度緩存工作實例:

cec161338af1479eababbeafbf69b4a7.png?

涂新顏色、更新最小深度值?

深度緩存算法有一個好處:與順序無關,不會有兩個浮點數的值完全一樣(出現深度完全一樣的情況),深度緩存算法被廣泛的應用于圖形學

f68362e6eebb49b7bddfc6f794100c21.png

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23309.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

14、企業數據資源相關會計處理暫行規定

為規范企業數據資源相關會計處理, 強化相關會計信息披露, 根據《中華人民共和國會計法》 和企業會計準則等相關規定, 現對企業數據資源的相關會計處理規定如下: 一、 關于適用范圍 本規定適用于企業按照企業會計準則相關規定確認為無形資產或存貨等資產類別的數據資源,以…

21 - 即時食物配送 II(高頻 SQL 50 題基礎版)

21 - 即時食物配送 II -- sum(if(order_datecustomer_pref_delivery_date,1,0))/count(*)sum(order_datecustomer_pref_delivery_date)/count(*) -- count(*),表示數據的行數,如果有分組,為分組后數據的行數select round(100*sum(if(order_datecustomer_…

【名詞解釋】Unity的Button組件及其使用示例

Unity的Button組件是Unity引擎中UI系統的一部分,它允許用戶創建可交互的按鈕,用戶可以點擊這些按鈕來觸發事件。Button組件通常用于游戲界面中,比如開始游戲、暫停游戲、選擇選項等。 Button組件的主要屬性包括: interactable: …

原來Stable Diffusion是這樣工作的

stable diffusion是一種潛在擴散模型,可以從文本生成人工智能圖像。為什么叫做潛在擴散模型呢?這是因為與在高維圖像空間中操作不同,它首先將圖像壓縮到潛在空間中,然后再進行操作。 在這篇文章中,我們將深入了解它到…

達摩院重大“遺產”!fluxonium量子比特初始化300納秒且保真度超過99%

通用量子計算機開發的主要挑戰之一是制備量子比特。十多年來,研究人員在構建量子計算機的過程中主要使用了transmon量子比特,這也是迄今為止商業上最成功的超導量子比特。 但與業界多數選擇transmon量子比特不同,(前)…

npm運行報錯:無法加載文件 C:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳本問題解決

問題其實已經顯而易見了 系統禁止運行腳本 以管理員身份運行 PowerShell: 右鍵點擊“開始”按鈕或按 Win X,然后選擇“Windows PowerShell(管理員)”。 查看當前執行策略: 在 PowerShell 中輸入以下命令來查看當前的執行策略: G…

Python文本處理利器:jieba庫全解析

文章目錄 Python文本處理利器:jieba庫全解析第一部分:背景和功能介紹第二部分:庫的概述第三部分:安裝方法第四部分:常用庫函數介紹1. 精確模式分詞2. 全模式分詞3. 搜索引擎模式分詞4. 添加自定義詞典5. 關鍵詞提取 第…

服務器遭遇UDP攻擊時的應對與解決方案

UDP攻擊作為分布式拒絕服務(DDoS)攻擊的一種常見形式,通過發送大量的UDP數據包淹沒目標服務器,導致網絡擁塞、服務中斷。本文旨在提供一套實用的策略與技術手段,幫助您識別、緩解乃至防御UDP攻擊,確保服務器穩定運行。我們將探討監…

最新PHP眾籌網站源碼 支持報名眾籌+商品眾籌+公益眾籌等多種眾籌模式 含完整代碼包和部署教程

在當今互聯網飛速發展的時代,眾籌模式逐漸成為了創新項目、商品銷售和公益活動融資的重要渠道。分享一款最新版的PHP眾籌網站源碼,支持報名眾籌、商品眾籌和公益眾籌等多種眾籌模式。該源碼包含了完整的代碼包和詳細的部署教程,讓新手也可以輕…

利用醫學Twitter進行病理圖像分析的視覺-語言基礎模型| 文獻速遞-視覺通用模型與疾病診斷

Title 題目 A visual–language foundation model for pathology image analysis using medical Twitter 利用醫學Twitter進行病理圖像分析的視覺-語言基礎模型 01 文獻速遞介紹 缺乏公開可用的醫學圖像標注是計算研究和教育創新的一個重要障礙。同時,許多醫生…

自動化測試-Selenium(一),簡介

自動化測試-Selenium 1. 什么是自動化測試 1.1 自動化測試介紹 自動化測試是一種通過自動化工具執行測試用例來驗證軟件功能和性能的過程。與手動測試不同,自動化測試使用腳本和軟件來自動執行測試步驟,記錄結果,并比較預期輸出和實際輸出…

【Python報錯】已解決ModuleNotFoundError: No module named ‘timm’

成功解決“ModuleNotFoundError: No module named ‘timm’”錯誤的全面指南 一、引言 在Python編程中,經常會遇到各種導入模塊的錯誤,其中“ModuleNotFoundError: No module named ‘timm’”就是一個典型的例子。這個錯誤意味著你的Python環境中沒有安…

Navicate 導入導出數據庫

導出數據庫 找地方存在來,別忘了放在那里。 新建一個數據庫,記得要和導出數據庫的 字符集與排序規則 相同 打開數據庫后,我們選擇它(就是單擊它)然后右鍵打開菜單-運行sql文件 找到剛才存儲的位置,開始 &a…

大中小面積紫外光老化加速試驗機裝置

高低溫試驗箱,振動試驗臺,紫外老化試驗箱,氙燈老化試驗箱,沙塵試驗箱,箱式淋雨試驗箱,臭氧老化試驗箱,換氣老化試驗箱,電熱鼓風干燥箱,真空干燥箱,超聲波清洗機,鹽霧試驗箱 一、產品用途 紫外光加速老化試驗裝置采用熒光紫外燈為光源,通過模擬自然陽光中…

oracle報錯ORA-01940: cannot drop a user that is currently connected解決方法

目錄 一.原因 二.解決方法 1.查詢活動會話 2.記下SID和SERIAL# 3.斷開會話 4.刪除用戶 一.原因 ORA-01940代表你正在刪除一個有活動會話的用戶 二.解決方法 1.查詢活動會話 SQL> SELECT sid, serial#, username, programFROM v$sessionWHERE username 你要刪除的u…

重寫mybatisPlus自定義ID生成策略

1.項目中需要引入mybatisplus核心組件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mp.version}</version></dependency> 2.新建一個類實現IdentifierGenera…

直接寫和放在函數中不同的R語言用法

索引數據框中的某一列 df$A可以索引數據框df中列名為A的列的所有值。那么假如列名是一個R對象怎么做&#xff1f; df <- data.frame(A1:5, B(1:5)*2)df$A## [1] 1 2 3 4 5needed_column A# df$needed_column ? Wrong# 注意是雙方括號 df[[needed_column]]## [1] 1 2 3 4…

微信小程序bindgetphonenumber獲取手機號阻止冒泡觸發

問題&#xff1a;點擊手機號彈出微信的手機號驗證組件&#xff0c;這是可以的。但是我點擊車牌號&#xff0c;也彈出來了&#xff0c;這就郁悶了。 以下是解決方法 點擊手機號時&#xff0c;彈出選擇手機號 解決&#xff1a; <view style"display: flex;justify-conte…

Pandas處理時間差的4種表達方式

在Pandas中處理時間差&#xff08;timedelta&#xff09;時&#xff0c;有多種方式可以表達時間差。以下是總結的Pandas時間差的四種主要表達方式和相關信息&#xff1a; 目錄 一、使用pd.Timedelta直接創建 二、使用DataFrame中計算時間差 三、轉換為分鐘數表示 四、使用…

pdf處理命令合集

安裝weasyprint用于生成pdf 單個文件合成多個pdf linux - Merge / convert multiple PDF files into one PDF - Stack Overflow