最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript圖像處理—仿射變換深度理解

 更新時間:2013年01月16日 09:06:37   作者:  
上一篇文章,我們講解了圖像金字塔,這篇文章我們來了解仿射變換,仿射?任何仿射變換都可以轉(zhuǎn)換成,乘以一個矩陣(線性變化),再加上一個向量(平移變化),接下來詳細介紹,感興趣的朋友可以了解下
前言

上一篇文章,我們講解了圖像金字塔,這篇文章我們來了解仿射變換。

仿射?

任何仿射變換都可以轉(zhuǎn)換成,乘以一個矩陣(線性變化),再加上一個向量(平移變化)。

實際上仿射是兩幅圖片的變換關系。

例如我們可以通過仿射變換對圖片進行:縮放、旋轉(zhuǎn)、平移等操作。

一個數(shù)學問題

在解決仿射問題前,我們來做一個數(shù)學題。

如圖,對于點(x1, y1),相對于原點旋轉(zhuǎn)一個角度a,那么這個點到哪里了呢?

我們將坐標系變成極坐標系,則點(x1, y1)就變成了(r, β),而旋轉(zhuǎn)后變成(r, α+ β)。

轉(zhuǎn)回直角坐標系,則旋轉(zhuǎn)后的點變成了(cos(α+ β) * r, sin(α+ β) * r)。

然后利用公式

cos(α+β)=cosαcosβ-sinαsinβ

sin(α+β)=sinαcosβ+cosαsinβ

以及原來點為(cosβ * r, sinβ * r),于是很容易得出新的點為(x1 * cosα - y1 * sinα, x1 * sinaα + y1 * cosα)。

我們可以從中推導出旋轉(zhuǎn)變換公式

那么平移就相對簡單很多了,就相當于加上一個向量(c, d)就行了。

獲得變換矩陣函數(shù)實現(xiàn)

通常我們使用2 \times 3矩陣來表示仿射變換。

A = \begin{bmatrix} a_{00} & a_{01} \\ a_{10} & a_{11} \end{bmatrix}_{2 \times 2} B = \begin{bmatrix} b_{00} \\ b_{10} \end{bmatrix}_{2 \times 1} M = \begin{bmatrix} A & B \end{bmatrix} =\begin{bmatrix} a_{00} & a_{01} & b_{00} \\ a_{10} & a_{11} & b_{10}\end{bmatrix}_{2 \times 3}

其中A是旋轉(zhuǎn)縮放變換,B是平移變換。則結(jié)果T滿足:

T = A \cdot \begin{bmatrix}x \\ y\end{bmatrix} + B 或者 

T = M \cdot [x, y, 1]^{T}

即:T = \begin{bmatrix} a_{00}x + a_{01}y + b_{00} \\ a_{10}x + a_{11}y + b_{10} \end{bmatrix}

復制代碼 代碼如下:

var getRotationArray2D = function(__angle, __x, __y){
var sin = Math.sin(__angle) || 0,
cos = Math.cos(__angle) || 1,
x = __x || 0,
y = __y || 0;

return [cos, -sin, -x,
sin, cos, -y
];
};

這樣我們就得到了一個仿射變換矩陣。

當然這個實現(xiàn)本身是有一定問題的,因為這個原點被固定在左上角了。

仿射變換實現(xiàn)

復制代碼 代碼如下:

var warpAffine = function(__src, __rotArray, __dst){
(__src && __rotArray) || error(arguments.callee, IS_UNDEFINED_OR_NULL/* {line} */);
if(__src.type && __src.type === "CV_RGBA"){
var height = __src.row,
width = __src.col,
dst = __dst || new Mat(height, width, CV_RGBA),
sData = new Uint32Array(__src.buffer),
dData = new Uint32Array(dst.buffer);

var i, j, xs, ys, x, y, nowPix;

for(j = 0, nowPix = 0; j < height; j++){
xs = __rotArray[1] * j + __rotArray[2];
ys = __rotArray[4] * j + __rotArray[5];
for(i = 0; i < width; i++, nowPix++, xs += __rotArray[0], ys += __rotArray[3]){

if(xs > 0 && ys > 0 && xs < width && ys < height){

y = ys | 0;
x = xs | 0;

dData[nowPix] = sData[y * width + x];
}else{
dData[nowPix] = 4278190080; //Black
}
}
}
}else{
error(arguments.callee, UNSPPORT_DATA_TYPE/* {line} */);
}
return dst;
};

這個函數(shù)先把矩陣數(shù)據(jù)變成32位形式,操作每個元素就等同于操作每一個像素。

然后遍歷所有元素,對對應的點進行賦值。

效果

 

相關文章

  • BootStrap select2 動態(tài)改變值的方法

    BootStrap select2 動態(tài)改變值的方法

    這篇文章主要介紹了BootStrap select2 動態(tài)改變值的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • JS面向?qū)ο缶幊虒崿F(xiàn)的Tab選項卡案例詳解

    JS面向?qū)ο缶幊虒崿F(xiàn)的Tab選項卡案例詳解

    這篇文章主要介紹了JS面向?qū)ο缶幊虒崿F(xiàn)的Tab選項卡,結(jié)合具體案例形式詳細分析了JS基于面向?qū)ο蟪绦蛟O計實現(xiàn)Tab選項卡的相關操作技巧,需要的朋友可以參考下
    2020-03-03
  • JS經(jīng)典正則表達式筆試題匯總

    JS經(jīng)典正則表達式筆試題匯總

    這篇文章主要介紹了JS經(jīng)典正則表達式筆試題,結(jié)合實例形式匯總分析了javascript正則表達式的經(jīng)典使用技巧,需要的朋友可以參考下
    2016-12-12
  • js字符限制(字符截取) 一個中文漢字算兩個字符

    js字符限制(字符截取) 一個中文漢字算兩個字符

    有時候我們需要限制用戶的輸入或者需要截取一定長度的字符串都需要用到這樣的功能代碼,這里腳本之家小編就為大家分享一下
    2017-09-09
  • JS實現(xiàn)倒計時和文字滾動的效果實例

    JS實現(xiàn)倒計時和文字滾動的效果實例

    這篇文章主要介紹了JS實現(xiàn)倒計時和文字滾動的效果,以實例的形式分析了倒計時與文字滾動效果的具體實現(xiàn)方法,并附有js時間變量的說明,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • springMvc 前端用json的方式向后臺傳遞對象數(shù)組方法

    springMvc 前端用json的方式向后臺傳遞對象數(shù)組方法

    今天小編就為大家分享一篇springMvc 前端用json的方式向后臺傳遞對象數(shù)組方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • javascript數(shù)組排序匯總

    javascript數(shù)組排序匯總

    本文給大家匯總了一下javascript的數(shù)組排序算法,包括冒泡排序、快速排序、插入排序、希爾排序,希望對大家熟悉javascript數(shù)組排序能夠有所幫助。
    2015-07-07
  • uni-app 支持多端第三方地圖定位的方法

    uni-app 支持多端第三方地圖定位的方法

    這篇文章主要介紹了uni-app 支持多端第三方地圖定位的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 一個簡單但常用的javascript表格樣式_鼠標劃過行變色 簡潔實現(xiàn)

    一個簡單但常用的javascript表格樣式_鼠標劃過行變色 簡潔實現(xiàn)

    經(jīng)常性的會需要使用表格顯示一些東西,當表格比較大的時候一眼望去腦袋可能會有些暈,經(jīng)常性的因為沒看準行而出現(xiàn)誤操作,一般解決辦法是交替行變行或者鼠標劃過行變色
    2008-09-09
  • JavaScript遞歸操作樹形結(jié)構代碼示例

    JavaScript遞歸操作樹形結(jié)構代碼示例

    前端樹形結(jié)構一般用于網(wǎng)頁的地理位置輸入框,地理位置級聯(lián)選擇,人員的部門選擇等,這篇文章主要給大家介紹了關于JavaScript遞歸操作樹形結(jié)構的相關資料,需要的朋友可以參考下
    2024-01-01

最新評論

开远市| 定陶县| 顺平县| 桂林市| 手机| 周至县| 宜兴市| 双城市| 唐海县| 台东县| 桂林市| 文水县| 固原市| 新蔡县| 北票市| 通城县| 大厂| 济宁市| 旬邑县| 遂昌县| 深水埗区| 德庆县| 囊谦县| 新密市| 菏泽市| 临湘市| 桃源县| 南部县| 古浪县| 临城县| 平陆县| 平舆县| 岱山县| 增城市| 铅山县| 江源县| 体育| 葵青区| 新龙县| 托里县| 仙桃市|