當前位置:首頁 » 操作系統 » 圖像畸變的校正演算法

圖像畸變的校正演算法

發布時間: 2023-05-26 00:19:40

⑴ 怎麼解決手機鏡頭畸變校正 簡述怎麼解決手機鏡頭畸變校正

1、點擊對應軟體。

2、點擊對應設備。

3、點擊右上角三個點圖標。

4、下拉菜單中,點擊攝像機設置。

5、界面跳轉,點擊畫面設置。

6、在鏡頭畸變糾正處,點擊右側按鈕即可。相機標定演算法比較復雜,詳情參考我的前面博客。這里不再對演算法做具體解釋說明,只簡單介紹一下標定的方法。在OPECV中,標定有兩種演算法,一種是棋盤紙,類似方格子紙,一種是圓圈陣列紙,兩種方法實現的原理一樣,都是通過分析圖像上固定角點的位置實現,取得的標定的參數也一樣,下面具體實現代碼,通過一個布爾變數使得我們的校正演算法可以兼容棋盤和圓圈陣列兩種方式。核心函數是findCirclesGrid和findChessboardCorners。

⑵ 對圖像進行伽馬校正

一. 伽馬校正簡介:

       拿氏型 伽馬校正用來對照相機等電子設備感測器的非線性光電轉換特性進行校正。如果圖像原樣顯示在顯示器等上,畫面就會顯得很暗。伽馬校正通過預先增大 RGB 的值來排除影響,達到對圖像校正的目的。

二. 伽馬校正演算法:

        非線性變換是由下式引起的,其中I_in和I_out 被歸一化,限定在 [0,1] 范圍內,c是常數,g為伽馬變數,通常取 2.2。

 消猜       我們只需要進行上面非線性變換的逆變換就可以進行伽馬校正了,伽馬校正式子如下:

三. 伽馬校正python實現,其中c=1,g=2.2

import cv2

import numpy as np

import matplotlib.pyplot as plt

# gamma correction

def gamma_correction(img, c=1, g=2.2):

        out = img.()

        out /= 255.

        out = (1/c * out) ** (1/g)

        out *= 255

        out = out.astype(np.uint8)

        return out

# Read image

img = cv2.imread("../paojie.jpg").astype(np.float)

# Gammma correction

out = gamma_correction(img)

# Save result

cv2.imshow("result", out)

cv2.imwrite("out.jpg", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

四. 實驗結果:

        核螞說白了,照相機等電子設備感測器在成像時會使得圖像變暗,變得不真實,我們採用伽馬校正來校正圖像,使得圖像明亮真實。

五. 參考內容:

         https://www.cnblogs.com/wojianxin/p/12511477.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104924723

⑶ 徑向畸變達到多少需要校正

畸變矯正主要包括徑向畸變和切向畸變

(1)徑向畸變(枕形、桶形):光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲

(2)切向畸變:透鏡不完全平行於圖像平面,即sensor裝配時與鏡頭間的角度不準

2、徑向畸變矯正原理

(1)矯正前後的坐標映射

輸出圖像(nJ,nI)--(寬高縮放比)->矯正後圖像--(張氏標定法)->矯正前圖像(輸入圖像(fOrgJ,fOrgI))

(2)映射到原圖的坐標不一定是整數,雙線性插值

舉例:輸出圖像(3,4)映射到輸入圖像(5.25,6.75)

輸出圖像(3,4) = 輸入圖像取(5,6)、(5,7)、(6,6)、(6,7)四點像素值雙線性插值

= 輸入圖像(5+0.25,6+0.75)

= (1-0.25)(1-0.75)f(5,6)+(1-0.25)*0.75*f(5,6+1)+0.25*(1-0.75)f(5+1,6)+0.25*0.75*f(5+1,6+1)

3、徑向畸變矯正演算法偽代碼

張氏標定法

其中(u, v)代表理想無畸變(即矯正後)的像素坐標,(˘u, ˘v)代表實際徑像畸變的情況下(矯正前)的像素坐標,(u0, v0)代表理想無畸變(即矯正後)的圖像主點,(u1, v1)代表實際徑像畸變(即矯正前)的圖像主點。x, y在這里分別代表矯正後圖像中(u, v)點像素分別在行向和列向與主點的距離。

(1)輸入圖像主點(圖像中心點坐標)--(張氏標定法)->矯正後圖像主點(矯正後圖像寬高)--->計算輸出圖像與矯正後圖像寬高縮放比

(2)輸出圖像坐標通過寬高縮放比映射到矯正後圖像坐標

(3)矯正後圖像坐標通過張氏標定法映射到輸入圖像坐標

(4)雙線性插值

4、優化、加速策略

(1)雙線性插值

*源圖像和目標圖像幾何中心對齊

SrcX=(dstX+0.5)* (srcWidth/dstWidth) -0.5
SrcY=(dstY+0.5) * (srcHeight/dstHeight)-0.5

*將浮點運算轉換成整數運算(除法採用移位操作)

*多線程

⑷ 如何利用opencv計算圖像畸變系數,並進行校正與攝像機標定

如果知道圖像,不知道相機還怎麼通過相機來標定畸變?
1、只給定一張圖片可以根據圖像中相關特徵進行標定,比如:圖像中的某個物體具有直線性特點。一般是找出本來應當是直線的物體邊緣,在其上取若干點,根據這些點將圖像中的物體邊緣重新校正為直線。簡單講就是利用: line is straight 這個原理。
2、目前最常用的張正友在1998年提出的一種標定方法,是通過二維標定板(平面標定板),根據小孔成像的原理,通過對 reprojection error 最小化進行非線性優化,來實現對相機的標定。並非根據看似高大上的訓練集來標定。
當然他寫這篇文章的目的不單單是為了校正畸變。畸變參數只是張正友相機標定法所求參數的一部分,即:兩個徑向畸變系數和兩個切向畸變系數。

消除畸變的目的是讓相機盡量地逼近針孔相機模型,這樣相機成像時直線才會保持其直線性。一般常見的畸變校正演算法都是根據這一原理來實現的。
當然,還有二般的情況。比如:圖像中壓根就沒有直線性物體存在。我們該怎麼辦?還能進行標定嗎?
答案是肯定的。可以利用對極約束,對圖像畸變進行標定。不過,這需要至少兩幅圖像,而且這兩幅圖像必須是同一相機在短時間內拍攝得到。

⑸ 遠心鏡頭畸變校正是什麼

由於遠心鏡頭是現實世界中的對象,它們有一定的剩餘畸變,這會影響測量精度。通過一個二階多項式能接近,畸變的計算公式為實際和預計的圖像高度的不同百分比。如果我們定義從圖像中心的徑向距離如下:
Ra = 實際半徑
Re = 預計半徑
實際半徑的功能是計算畸變:
dist (Ra) = (Ra - Re)/Ra = c*Raˆ2 + b*Ra + a
其中a, b和c 是恆定值,它定義畸變曲線的表現; 注意"a"通常表示零畸變,它通常是在圖像的中心。在有些情況下,三階多項式可以得到曲線完美契合。除了徑向畸變外,梯形畸變也必須考慮。這種情況可以被 認為是由於光學和機械部件偏離角度的錯誤,其後果是圖像空間和對象空間的平行線轉化為會聚(或發散)。這樣的狀況,也稱為"梯形畸變"或"薄棱鏡",可以 很容易地通過相當常見的演算法,計算會聚束線相互交叉的點。有趣的是,徑向和梯形畸變是兩個完全不同的物理現象,因此,他們可以通過兩個獨立的空間轉換功 能,通過數學方法來隨後校正。另一種方法是馬上校正到合適的畸變:網格的圖案是用來定義畸變的誤差值,它們有區帶。最終的結果是一個向量場關聯到一個具體 的圖像區,每個向量定義修正已被應用到的x, y坐標的圖像范圍內來進行測量。
有點復雜,看不懂的朋友可以找崑山慕藤光的技術工程師,他們就是做遠心鏡頭的,知道的機器視覺知識都很全面,希望這個回答對你有幫助。

⑹ matlab圖像畸變校正

你自己看這一段
for i=1:h %從理想圖像矩陣出發處理
for j=1:w
x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2];
u=x*a0+og(2); % 逆向映射(j,i)到畸變圖像矩陣(v,u)
v=x*b0+og(1);
if (u>1)&&(u<w)&&(v>1)&&(v<野搜彎h) %處理在圖像大小范圍內的像素點
uu=floor(u); %對u取整
vv=floor(v); %對v取整
arf=u-uu; %計算上面提到的
bta=v-vv; %計算上面提到的
for k=1:3 %進行灰度雙線性插值
ft1=(1-bta)*b(vv,uu,k)+bta*b(vv+1,uu,k);
ft2=(1-bta)*b(vv,uu+1,k)+bta*b(vv+1,uu+1,k);
sp(i,j,k)=(1-arf)*ft1+arf*ft2;
end
end
imshow(uint8(sp)); %顯示校正圖像

3個for加一個if,可只有2個end,程序都沒寫完當然出錯。

———————————頌悶———————————————————漏中————
然後還有這一段
for k=1:n%轉換到以對稱點為原點的空間關系並構造矩陣A
A(k)=[1,gm(k,1)-og(1),gm(k,2)-og(2),(gm(k,1)-og(1)^2), (gm(k,1)-og(1))*(gm(k,2)-og(2)),(gm(k,2)-og(2) ^2)];
end

A(k)是一個元素,可你卻把它定義為一個數組,肯定也要出錯。

————————————————————————————————
你要我改,我只能保證程序能運行,但對不對我無法保證。
function gmodify(pic,uv,gm,og) %pic表示要處理的圖像的路徑文件名
%uv是一個二維矩陣,uv(:,1)代表上面提到的,uv(:,2)表示
%gm是一個二維矩陣,gm(j,:)代表在校正圖空間上與uv(j,:)一一應的點
%og 代表對稱中心,它是一個二維向量
a=imread(pic);
b=double(a);
n=size(gm(:,1));
for k=1:n%轉換到以對稱點為原點的空間關系並構造矩陣A
A(k,:)=[1,gm(k,1)-og(1),gm(k,2)-og(2),(gm(k,1)-og(1)^2), (gm(k,1)-og(1))*(gm(k,2)-og(2)),(gm(k,2)-og(2) ^2)];
end
[h,w]=size(b(:,:,1));
sp=zeros(h,w,3)+255;
a0=pinv(A)* uv(:,2); %計算上面提到的地址映射的系數估計a
b0=pinv(A)* uv(:,1); %計算上面中提到的地址映射的系數估計b
for i=1:h %從理想圖像矩陣出發處理
for j=1:w
x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2];
u=x*a0+og(2); % 逆向映射(j,i)到畸變圖像矩陣(v,u)
v=x*b0+og(1);
if (u>1)&&(u<w)&&(v>1)&&(v<h) %處理在圖像大小范圍內的像素點
uu=floor(u); %對u取整
vv=floor(v); %對v取整
arf=u-uu; %計算上面提到的
bta=v-vv; %計算上面提到的
for k=1:3 %進行灰度雙線性插值
ft1=(1-bta)*b(vv,uu,k)+bta*b(vv+1,uu,k);
ft2=(1-bta)*b(vv,uu+1,k)+bta*b(vv+1,uu+1,k);
sp(i,j,k)=(1-arf)*ft1+arf*ft2;
end
end
end
end
imshow(uint8(sp)); %顯示校正圖像

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:642
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:88
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:794
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:346
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:818
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:367
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:594