国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Halcon用矩陣實現(xiàn)圖像變換(平移,旋轉(zhuǎn),縮放,鏡像等)

這篇具有很好參考價值的文章主要介紹了Halcon用矩陣實現(xiàn)圖像變換(平移,旋轉(zhuǎn),縮放,鏡像等)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

圖像變換介紹

?用Halcon自帶的算子實現(xiàn)圖像變換

使用矩陣來實現(xiàn)相關(guān)算子的功能

一、平移

二、旋轉(zhuǎn)

三、縮放

四、鏡像

完整代碼


????????在halcon中經(jīng)常會用到圖像變換的操作,然后這次作業(yè)是用矩陣來實現(xiàn)相關(guān)算子的功能,學(xué)到了挺多的所以就記錄下來方便復(fù)習(xí)。

圖像變換介紹

????????基礎(chǔ)部分可以看這篇文章,寫的挺好的

深入淺出HALCON幾何變換https://www.51halcon.com/forum.php?mod=viewthread&tid=1466

?用Halcon自帶的算子實現(xiàn)圖像變換

????????在學(xué)習(xí)矩陣先用算子實現(xiàn)一遍,畢竟這些封裝好算子才是高頻使用的東西,而且也可以方便

接下來自己實現(xiàn)時比對效果

read_image (Image, 'datacode/ecc200/ecc200_to_preprocess_001.png')
hom_mat2d_identity (HomMat2DIdentity)
*平移
hom_mat2d_translate (HomMat2DIdentity, 64, 64, HomMat2DTranslate)
affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'false')
*縮放
hom_mat2d_scale (HomMat2DIdentity, 2, 2, 0, 0, HomMat2DScale)
affine_trans_image (Image, ImageAffineTrans1, HomMat2DScale, 'constant', 'false')
*旋轉(zhuǎn)
hom_mat2d_rotate (HomMat2DIdentity, 0.78, 0, 0, HomMat2DRotate)
affine_trans_image (Image, ImageAffineTrans2, HomMat2DRotate, 'constant', 'false')
*鏡像
get_image_size (Image, Width, Height)
hom_mat2d_reflect (HomMat2DIdentity, 0, Width/2, 10, Width/2 , HomMat2DReflect1)
affine_trans_image (Image, ImageAffineTrans3, HomMat2DReflect1, 'constant', 'false')

? ? ? ? 這里我提一嘴hom_mat2d_reflect的第2到第5個的參數(shù)。這其實是兩個坐標(biāo)點,halcon根據(jù)這兩個坐標(biāo)形成的線來當(dāng)作對稱軸。比如我這里的坐標(biāo)點是(0, Width/2)和(10, Width/2),也就是圖像列的中點,所以圖像會左右鏡像。

????????順便一提,這個圖片是halcon自帶的,打開read_image的算子窗口點擊文件夾的圖標(biāo)就可以找到你的halcon的圖片存放的路徑,上面我已經(jīng)改成相對路徑所以應(yīng)該可以直接運行

halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺

使用矩陣來實現(xiàn)相關(guān)算子的功能

一、平移

????????基本的思路是將圖像的每個坐標(biāo)和矩陣相乘得到新的坐標(biāo),然后將舊坐標(biāo)的像素值賦與新坐標(biāo)

????????首先創(chuàng)建一個矩陣

*平移
*[1,0,x,\
*0,1,y,\
*0,0,1]
create_matrix (3, 3, [1,0,64,\
                      0,1,64,\
                      0,0,1], MatrixID)

????????平移矩陣形式如上,x和y分別是你在x軸和y軸上的平移量。

????????然后遍歷圖片,將每個坐標(biāo)與矩陣相乘,在這里我們先創(chuàng)建一個新的空圖像,然后將變換后的圖輸入到新圖像中,這樣就不會覆蓋原圖

*使用gen_image_const 創(chuàng)建一個空圖像
get_image_size (Image, Width, Height)
gen_image_const (Imageout, 'byte', Width, Height)
for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        *得到原圖的坐標(biāo)點的像素值
        get_grayval (Image, x, y, Grayval)
        *將坐標(biāo)轉(zhuǎn)化為矩陣形式以用于矩陣相乘
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        *平移
        mult_matrix (MatrixID, MatrixID1, 'AB', MatrixMultID)
        *得到矩陣的值,Values[0]是x,Values[1]是y
        get_full_matrix (MatrixMultID, Values)
        *邊界處理
        if (Values[0] >= 0 and Values[0] <Height and\
            Values[1] >= 0 and Values[1] <Width)
            *將矩陣的值賦與新圖像
            set_grayval (Imageout, Values[0], Values[1], Grayval)
        endif
        
        endif
    endfor
endfor

????????因為我們圖像大小是400*400的,所以根據(jù)這張圖像創(chuàng)建的新圖像大小也是400*400的。當(dāng)它平移后超過圖像大小范圍的地方要被裁剪。如果你不想裁剪圖像,那么創(chuàng)建新圖像時就要考慮到平移的長度。

halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺

????????如上,左側(cè)是原圖,中間紅色區(qū)域是圖像的域,也就是圖像的大小,右側(cè)是平移后的圖像。可以看到圖像超出紅色區(qū)域的部分被裁剪。

二、旋轉(zhuǎn)

????????旋轉(zhuǎn)的思路和平移略有不同,如果直接遍歷原圖你會得到這樣的結(jié)果

halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺

左圖為正常結(jié)果圖像,右圖為遍歷原圖得到的圖像

????????出現(xiàn)這種結(jié)果是因為當(dāng)你用矩陣去乘圖像時很可能得不到某些點的坐標(biāo),因此這些點不會被賦值,自然就會出現(xiàn)空洞。

????????用下面的代碼測試

*由圖可知在點(1,3)處有空洞,遍歷原圖,讓程序在點(1,3)處停止,
*如果沒有停止則代表該點沒有出現(xiàn)過
mult_matrix (MatrixID2, MatrixID1, 'AB', MatrixMultID2)
get_full_matrix (MatrixMultID2, Values2)
if (Values2[0] >= 1 and Values2[0] <2 and\
Values2[1] >= 3 and Values2[1] <4)
    stop ()
endif

查過資料后才知道,為防止空洞出現(xiàn)一般用反解法。所謂反解法就是不遍歷原圖,而是遍歷結(jié)果圖,這樣就可以保證結(jié)果圖上的每一個點都有數(shù)值,防止空洞現(xiàn)象出現(xiàn)。

halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺

????????如圖所示,一般情況我們是遍歷原圖來得到結(jié)果圖,就是①的思路,但原圖上的坐標(biāo)點并不和結(jié)果圖一一對應(yīng),也就是說原圖上的(2,3)未必就落在結(jié)果圖的(2,3)上(一樣的話你也實現(xiàn)不了旋轉(zhuǎn)的效果╮(╯▽╰)╭)

? ? ? ? 現(xiàn)在轉(zhuǎn)變一下思路,既然原圖上的點無法一一映射到結(jié)果圖上,那么不妨用結(jié)果圖一一映射到原圖上去,也就是②的思路:通過遍歷結(jié)果圖的坐標(biāo),在原圖上去尋找對應(yīng)的像素值。這就是反解法。

? ? ? ? 可能還會有人有疑惑,所以我再啰嗦一點。兩張圖之間的對應(yīng)關(guān)系來源于你的矩陣,而矩陣運算結(jié)果未必就包括了所有的點,所以正推時出現(xiàn)的空洞就是結(jié)果中沒有包含的點。而反推時其實也沒有用到原圖的所有點,比如原圖是400X400的大小共160,000個像素值,結(jié)果圖中比如就用了15萬個點的值,那么剩下1萬多個點就是矩陣運算中沒有計算到的點的地方了。所以其實只用反解法的話效果未必會好,這也是為什么需要用線性插值的原因了。

? ? ? ? 那么說完為什么用反解法后,就是怎么用反解法了。我們可以先從數(shù)學(xué)角度來看

halcon旋轉(zhuǎn)圖像的算子,矩陣,人工智能,計算機視覺

? ? ? ? 其中,Y是結(jié)果圖的坐標(biāo)矩陣,X是原圖的坐標(biāo)矩陣,A則是旋轉(zhuǎn)矩陣,A(-1)則是A的逆矩陣。一般我們是已知X和A要求Y,但現(xiàn)在我們使用反解法,故此是已知Y和A要求X,簡單推導(dǎo)后可以得到上式。所以反解法說著好聽,其實就是用A的逆矩陣來乘就行了,代碼如下。

*旋轉(zhuǎn)
create_matrix (3, 3, [cos(rad(45)),-sin(rad(45)),0,\
                      sin(rad(45)),cos(rad(45)),0,\
                      0,0,1], MatrixID2)
*使用反解法故需得到逆矩陣
invert_matrix (MatrixID2, 'general', 0, MatrixInvID)

for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        *得到原圖的坐標(biāo)點的像素值
        get_grayval (Image, x, y, Grayval)
        *將坐標(biāo)轉(zhuǎn)化為矩陣形式以用于矩陣相乘
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        
        *旋轉(zhuǎn)
        mult_matrix (MatrixInvID, MatrixID1, 'AB', MatrixMultID2)
        get_full_matrix (MatrixMultID2, Values2)
        
        endif
    endfor
endfor

????????這樣一來我們就得到我們想要的值Values2。當(dāng)然就如上面所說,反解法得到的結(jié)果未必就好,多數(shù)情況下我們還需要使用線性插值的辦法來得到最佳的結(jié)果

? ? ? ? 有關(guān)線性插值我們可以參考下面這一篇,我覺得講的還挺好的

雙線性插值原理詳解及代碼實現(xiàn) - kkjz的文章

????????根據(jù)大佬的思路創(chuàng)建下面兩個函數(shù),然后直接用就行了

*函數(shù)一:線性插值single_biline
*x:輸入點坐標(biāo),x1,x2:已知點坐標(biāo),p1,p2:已知點像素值,p:輸入點像素值

al := abs(x2 - x)
p := al*p1 + (1 - al)*p2

*函數(shù)二:雙線性插值double_biline
*邊界處理
get_image_size (Image, Width, Height)
if (Value_x < 0 or Value_y< 0 or\
Value_x > Height - 1 or Value_y> Width - 1)
    pout := -1
    return ()
endif
*得到x軸的相鄰點
tuple_floor (Value_x, x1)
x1 := int (x1)
tuple_ceil (Value_x, x2)
x2 := int (x2)
*得到y(tǒng)軸的相鄰點
tuple_floor (Value_y, y1)
y1 := int (y1)
tuple_ceil (Value_y, y2)
y2 := int (y2)
*得到點的像素值
get_grayval (Image, x1, y1, p1)
get_grayval (Image, x2, y1, p2)
get_grayval (Image, x1, y2, p3)
get_grayval (Image, x2, y2, p4)
*雙線性插值
single_biline (Value_x, x1, x2,  p1, p2, p12)
single_biline (Value_x, x1, x2, p3, p4, p34)
single_biline (Value_y, y1, y2, p12, p34, pout)

????????完整代碼如下

*旋轉(zhuǎn)
create_matrix (3, 3, [cos(rad(45)),-sin(rad(45)),0,\
                      sin(rad(45)),cos(rad(45)),0,\
                      0,0,1], MatrixID2)
*使用反解法故需得到逆矩陣
invert_matrix (MatrixID2, 'general', 0, MatrixInvID)
get_image_size (Image, Width, Height)
gen_image_const (Imageout2, 'byte', Width, Height)
for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        *旋轉(zhuǎn)
        mult_matrix (MatrixInvID, MatrixID1, 'AB', MatrixMultID2)
        get_full_matrix (MatrixMultID2, Values2)
        
        double_biline (Image, Values2[0], Values2[1], pout)
        if (pout == (-1))
            continue
        endif
        set_grayval (Imageout2, x, y, pout)
endfor

????????在這里我的邊界處理和大佬不同,我是直接將越界的值直接continue掉。因為我這里原圖和結(jié)果圖的域是相同的,所以結(jié)果圖中有些地方不存在值,直接continue掉了。

三、縮放

????????縮放與旋轉(zhuǎn)思路一樣,只是矩陣不同而已,所以我就直接貼代碼了

*縮放,x和y分別是x軸和y軸的縮放倍率
*[x,0,0,\
*0,y,0,\
*0,0,1]
create_matrix (3, 3, [2,0,0,\
                      0,2,0,\
                      0,0,1], MatrixID3)
invert_matrix (MatrixID3, 'general', 0, MatrixInvID1)
get_image_size (Image, Width, Height)
gen_image_const (Imageout3, 'byte', Width, Height)
for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        *縮放
        mult_matrix (MatrixInvID1, MatrixID1, 'AB', MatrixMultID3)
        get_full_matrix (MatrixMultID3, Values3)
        
        get_grayval (Image,Values3[0], Values3[1], Grayval1)
        set_grayval (Imageout3, x, y, Grayval1)
        double_biline (Image, Values3[0], Values3[1], pout2)
        if (pout2 == (-1))
            continue
        endif
        set_grayval (Imageout3,x,y, pout2)
        
    endfor
endfor

四、鏡像

????????鏡像與平移同理,不過鏡像矩陣我是直接抄的hom_mat2d_reflect的矩陣,感興趣可以自行研究

*鏡像
get_image_size (Image, Width, Height)
create_matrix (3, 3, [1,0,0,\
                      0,-1,Width,\
                      0,0,1], MatrixID4)

get_image_size (Image, Width, Height)
gen_image_const (Imageout4, 'byte', Width, Height)
for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        get_grayval (Image, x, y, Grayval)
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        *鏡像
        mult_matrix (MatrixID4, MatrixID1, 'AB', MatrixMultID4)
        get_full_matrix (MatrixMultID4, Values4)
        if (Values4[0] >= 0 and Values4[0] <Height and\
            Values4[1] >= 0 and Values4[1] <Width)
            set_grayval (Imageout4, Values4[0], Values4[1], Grayval)
        endif
        
    endfor
endfor

完整代碼

read_image (Image, 'datacode/ecc200/ecc200_to_preprocess_001.png')
* read_image (Image, 'claudia.png')
* rgb1_to_gray (Image, Image)
hom_mat2d_identity (HomMat2DIdentity)
get_domain (Image, Domain)
*平移
hom_mat2d_translate (HomMat2DIdentity, 64, 64, HomMat2DTranslate)
affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'false')
*縮放
hom_mat2d_scale (HomMat2DIdentity, 2, 2, 0, 0, HomMat2DScale)
affine_trans_image (Image, ImageAffineTrans1, HomMat2DScale, 'constant', 'false')
*旋轉(zhuǎn)
hom_mat2d_rotate (HomMat2DIdentity, 0.78, 0, 0, HomMat2DRotate)
affine_trans_image (Image, ImageAffineTrans2, HomMat2DRotate, 'constant', 'false')
*鏡像
get_image_size (Image, Width, Height)
hom_mat2d_reflect (HomMat2DIdentity, 0, Width/2, 10, Width/2 , HomMat2DReflect1)
affine_trans_image (Image, ImageAffineTrans3, HomMat2DReflect1, 'constant', 'false')

*tuple實現(xiàn)變換
dev_update_off ()
*平移
create_matrix (3, 3, [1,0,64,\
                      0,1,64,\
                      0,0,1], MatrixID)
*旋轉(zhuǎn)
create_matrix (3, 3, [cos(rad(45)),-sin(rad(45)),0,\
                      sin(rad(45)),cos(rad(45)),0,\
                      0,0,1], MatrixID2)
*使用反解法故需得到逆矩陣
invert_matrix (MatrixID2, 'general', 0, MatrixInvID)

*縮放
create_matrix (3, 3, [2,0,0,\
                      0,2,0,\
                      0,0,1], MatrixID3)
invert_matrix (MatrixID3, 'general', 0, MatrixInvID1)

*鏡像
get_image_size (Image, Width, Height)
create_matrix (3, 3, [1,0,0,\
                      0,-1,Width,\
                      0,0,1], MatrixID4)

get_image_size (Image, Width, Height)
gen_image_const (Imageout, 'byte', Width, Height)
gen_image_const (Imageout2, 'byte', Width, Height)
gen_image_const (Imageout3, 'byte', Width, Height)
gen_image_const (Imageout4, 'byte', Width, Height)
for x := 0 to Height - 1 by 1
    for y := 0 to Width - 1 by 1
        get_grayval (Image, x, y, Grayval)
        create_matrix (3, 1, [x,\
                              y,\
                              1], MatrixID1)
        *平移
        mult_matrix (MatrixID, MatrixID1, 'AB', MatrixMultID)
        get_full_matrix (MatrixMultID, Values)
        if (Values[0] >= 0 and Values[0] <Height and\
            Values[1] >= 0 and Values[1] <Width)
            set_grayval (Imageout, Values[0], Values[1], Grayval)
        endif

        *旋轉(zhuǎn)
        mult_matrix (MatrixInvID, MatrixID1, 'AB', MatrixMultID2)
        get_full_matrix (MatrixMultID2, Values2)
        
        double_biline (Image, Values2[0], Values2[1], pout)
        if (pout != (-1))
            set_grayval (Imageout2, x, y, pout)
        endif
        
        *縮放
        mult_matrix (MatrixInvID1, MatrixID1, 'AB', MatrixMultID3)
        get_full_matrix (MatrixMultID3, Values3)

        double_biline (Image, Values3[0], Values3[1], pout2)
        if (pout2 != (-1))
            set_grayval (Imageout3,x,y, pout2)
        endif
        
        
        *鏡像
        mult_matrix (MatrixID4, MatrixID1, 'AB', MatrixMultID4)
        get_full_matrix (MatrixMultID4, Values4)
        if (Values4[0] >= 0 and Values4[0] <Height and\
            Values4[1] >= 0 and Values4[1] <Width)
            set_grayval (Imageout4, Values4[0], Values4[1], Grayval)
        endif
        
                

    endfor
endfor






相關(guān)函數(shù)代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-854392.html

*函數(shù)一:線性插值single_biline
*x:輸入點坐標(biāo),x1,x2:已知點坐標(biāo),p1,p2:已知點像素值,p:輸入點像素值

al := abs(x2 - x)
p := al*p1 + (1 - al)*p2

*函數(shù)二:雙線性插值double_biline
*邊界處理
get_image_size (Image, Width, Height)
if (Value_x < 0 or Value_y< 0 or\
Value_x > Height - 1 or Value_y> Width - 1)
    pout := -1
    return ()
endif
*得到x軸的相鄰點
tuple_floor (Value_x, x1)
x1 := int (x1)
tuple_ceil (Value_x, x2)
x2 := int (x2)
*得到y(tǒng)軸的相鄰點
tuple_floor (Value_y, y1)
y1 := int (y1)
tuple_ceil (Value_y, y2)
y2 := int (y2)
*得到點的像素值
get_grayval (Image, x1, y1, p1)
get_grayval (Image, x2, y1, p2)
get_grayval (Image, x1, y2, p3)
get_grayval (Image, x2, y2, p4)
*雙線性插值
single_biline (Value_x, x1, x2,  p1, p2, p12)
single_biline (Value_x, x1, x2, p3, p4, p34)
single_biline (Value_y, y1, y2, p12, p34, pout)

到了這里,關(guān)于Halcon用矩陣實現(xiàn)圖像變換(平移,旋轉(zhuǎn),縮放,鏡像等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    空間變換中的仿射變換對應(yīng)著五種變換,平移,縮放,旋轉(zhuǎn),翻轉(zhuǎn),錯切。而這五種變化由原圖像轉(zhuǎn)變到變換圖像的過程,可以用仿射變換矩陣進行描述。而這個變換過程可以用一個2*3的矩陣與原圖進行相乘得到。關(guān)鍵就是這個矩陣M: ?平移,旋轉(zhuǎn)? ?透視 M: 變換矩陣 desi

    2024年01月21日
    瀏覽(95)
  • Opencv-C++筆記 (16) : 幾何變換 (圖像的翻轉(zhuǎn)(鏡像),平移,旋轉(zhuǎn),仿射,透視變換)

    Opencv-C++筆記 (16) : 幾何變換 (圖像的翻轉(zhuǎn)(鏡像),平移,旋轉(zhuǎn),仿射,透視變換)

    圖像旋轉(zhuǎn)是指圖像按照某個位置轉(zhuǎn)動一定的角度的過程,旋轉(zhuǎn)中圖像仍保持著原始尺寸。圖像旋轉(zhuǎn)后圖像水平對稱軸、垂直對稱軸及中心坐標(biāo)原點都可能會發(fā)生變換,因此需要對圖像旋轉(zhuǎn)中的坐標(biāo)進行相應(yīng)轉(zhuǎn)換。 假設(shè)有一個點:P(x,y),它在繞原點 O(0,0) 旋轉(zhuǎn) β 后,被轉(zhuǎn)換成

    2024年02月14日
    瀏覽(109)
  • pygame圖像變換:縮放、旋轉(zhuǎn)、鏡像

    pygame圖像變換:縮放、旋轉(zhuǎn)、鏡像

    pygame的transform中封裝了一些基礎(chǔ)的圖像處理函數(shù),列表如下 函數(shù) 功能 flip 鏡像 scale 縮放至新的分辨率 scale_by 根據(jù)因子進行縮放 scale2x 專業(yè)圖像倍增器 rotate 旋轉(zhuǎn) rotozoom 縮放并旋轉(zhuǎn) smoothscale 平滑縮放 smoothscale_by 平滑縮放至新的分辨率 chop 獲取已刪除內(nèi)部區(qū)域的圖像的副本

    2024年02月04日
    瀏覽(28)
  • 【C++】【Opencv】cv::warpAffine()仿射變換函數(shù)詳解,實現(xiàn)平移、縮放和旋轉(zhuǎn)等功能

    【C++】【Opencv】cv::warpAffine()仿射變換函數(shù)詳解,實現(xiàn)平移、縮放和旋轉(zhuǎn)等功能

    仿射變換是一種二維變換,它可以將一個二維圖形映射到另一個二維圖形上,保持了圖形的“形狀”和“大小”不變,但可能會改變圖形的方向和位置。仿射變換可以用一個線性變換矩陣來表示,該矩陣包含了六個參數(shù),可以進行平移、縮放、旋轉(zhuǎn)等操作。通過原理、函數(shù)和

    2024年02月05日
    瀏覽(94)
  • Android中矩陣Matrix實現(xiàn)平移,旋轉(zhuǎn),縮放和翻轉(zhuǎn)的用法詳細(xì)介紹

    Android中矩陣Matrix實現(xiàn)平移,旋轉(zhuǎn),縮放和翻轉(zhuǎn)的用法詳細(xì)介紹

    一,矩陣Matrix的數(shù)學(xué)原理 矩陣的數(shù)學(xué)原理涉及到矩陣的運算和變換,是高等代數(shù)學(xué)中的重要概念。在圖形變換中,矩陣起到關(guān)鍵作用,通過矩陣的變換可以改變圖形的位置、形狀和大小。矩陣的運算是數(shù)值分析領(lǐng)域的重要問題,對矩陣進行分解和簡化可以簡化計算過程。對于

    2024年01月22日
    瀏覽(38)
  • Android 對View 進行旋轉(zhuǎn)、縮放、平移的屬性變換后,獲取外矩形頂點

    Android 對View 進行旋轉(zhuǎn)、縮放、平移的屬性變換后,獲取外矩形頂點

    來張圖 Android View 通過平移、旋轉(zhuǎn)、縮放后,頂點映射 之前寫的這個文章,里面用到的是 matrix.mapPoints() 通過 矩形的4個點來映射出新的4個點。 個人以為這就會得到正確的結(jié)果。 最近呢,就想著,驗證一下這個是不是正確的 驗證想法: “基于 變換后的 ltrb,加一個自定義

    2023年04月23日
    瀏覽(24)
  • webgl-矩陣、旋轉(zhuǎn)、平移、縮放 glMatrix組件

    webgl-矩陣、旋轉(zhuǎn)、平移、縮放 glMatrix組件

    引入新組建glMatrix glMatrix.js /*! @fileoverview gl-matrix - High performance matrix and vector operations @author Brandon Jones @author Colin MacKenzie IV @version 3.4.3 Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation f

    2024年02月10日
    瀏覽(33)
  • Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪

    Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪

    %%------------------------Matlab圖像的平移,旋轉(zhuǎn),縮放,裁剪------------------------------- %-------------------頭文件----------------------------- clc ; %清屏幕 clear ; %刪除所有的變量 close all ; %將所有打開的圖片關(guān)掉 %--------------------圖像平移 imtranslate-------------------------- A = imread(\\\'1.jpg\\\') ; subplot(

    2024年02月04日
    瀏覽(25)
  • Python實現(xiàn)圖像的平移、鏡像、旋轉(zhuǎn)(不調(diào)用CV自身函數(shù))

    Python實現(xiàn)圖像的平移、鏡像、旋轉(zhuǎn)(不調(diào)用CV自身函數(shù))

    老師布置的作業(yè)。。。。。 圖像的平移在幾何變換中算是最簡單的變換之一,話不多說,直奔主題 由圖可知,在opencv中圖像的原點一般為左上角,設(shè)初始坐標(biāo)為 ( x 0 , x 0 ) (x_{0}, x_{0}) ( x 0 ? , x 0 ? ) 的經(jīng)過平移 ( △ x , △ y ) (bigtriangleup x, bigtriangleup y) ( △ x , △ y ) 后,坐

    2024年02月06日
    瀏覽(33)
  • Python圖像處理丨圖像縮放、旋轉(zhuǎn)、翻轉(zhuǎn)與圖像平移

    Python圖像處理丨圖像縮放、旋轉(zhuǎn)、翻轉(zhuǎn)與圖像平移

    摘要: 本篇文章主要講解Python調(diào)用OpenCV實現(xiàn)圖像位移操作、旋轉(zhuǎn)和翻轉(zhuǎn)效果,包括四部分知識:圖像縮放、圖像旋轉(zhuǎn)、圖像翻轉(zhuǎn)、圖像平移。 本文分享自華為云社區(qū)《[Python圖像處理] 六.圖像縮放、圖像旋轉(zhuǎn)、圖像翻轉(zhuǎn)與圖像平移》,作者:eastmount 。 本篇文章主要講解Pyth

    2024年02月06日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包