1. 磐创AI-开放猫官方网站首页
  2. Medium

数字图像基础知识

ကွန်ပျူတာကData​တွေကိုဂဏန်း​တွေအဖြစ်မြင်ထားပြီး​လိုအပ်တဲ့တွက်ချက်မှု​တွေလုပ်၊​ဆောင်ရွက်ပါတယ်။图像​ကို张量​အဖြစ်ကွန်ပျူတာကကိန်းဂဏန်း​တွေနဲ့မြင်ပါတယ်။​မေထရစ်တင်ဆာ​တွေအဖြစ်သတ်မှတ်ထားလို့သင်္ချာပစ္စည်း张量运算​တွေကိုလည်း​ကောင်း​ကောင်းလုပ်နိုင်ပါတယ်။​မေထရစ်တစ်ခုကိုအခြား​မေထရစ်သို့မဟုတ်ဂဏန်းတန်ဖိုးတခုခုနဲ့​ပေါင်း၊နုတ်၊​မြှောက်၊စားစသဖြင့်运营​တွေလုပ်ရင်မူလ​မေထရစ်က​နေတန်ဖိုး​တွေ​ပြောင်းသွားပါတယ်။图像​တွေလည်း​မေထရစ်တင်ဆာပဲဖြစ်တာ​ကြောင့်အလားတူပါပဲ။တန်ဖိုး​တွေ​ပြောင်းသွားမှာပါ။ဓါတ်ပုံရဲ့စို​ပြေမှုကစလို့အရွယ်အစား၊အတည့်၊အ​စောင်းပမာဏ​တွေကအစ​​ပြောင်းလဲနိုင်ပါတယ်။ကျွန်​တော်တို့က​နေ့​ဆွေး​နွေးမယ့်အ​ကြောင်းအရာက​တော့အဲဒီလို​ပြောင်းလဲတဲ့几何变换အ​ကြောင်းဖြစ်ပါတယ်။

意象翻译

ပထမဆုံး​​ဆွေး​နွေးရမယ့်Geometry Transformဖြစ်ပါတယ်။အ​ခြေခံအကျဆုံးလည်းဖြစ်ပါတယ်။ImageထဲကObject​တွေကို​နေရာ​ရွှေ့တာသပ်သပ်ပါပဲ။Point P(x,y)​နေရာမှာရှိ​နေတဲ့ဝတ္ထု(မူရင်း(x,y)နဲ့图像)ကိုP‘(x’,y‘)​နေရာ​ရောက်​အောင်tx,tyစီ​ရွှေ့လိုက်မှာဖြစ်ပါတယ်။

အထက်ပါပုံကိုကြည့်မယ်ဆိုရင်ဓါတ်ပုံထဲက像素​တွေ对象​တွေကိုဘယ်​နေရာဖြစ်ဖြစ်​变换矩阵Mသုံးပြီးရွှေ့နိုင်တယ်ဆိုတာသိသာပါတယ်။

opencvမှာ​တော့cv2.warpAffine函数ကိုအသုံးပြုလို့ရပါတယ်။

cv.warpAffine(src,M,dsize[,dst[,flag[,borderMode[,borderValue])

SRC命令:输入图像

M:变换矩阵

DSIZE:输出图像的大小

标志1:သုံးမယ့်插值法

ဥပမာမှာဆိုရင်OpenCV徽标ကိုxဝင်ရိုးအားဖြင့်100点,yဝင်ရိုးအားဖြင့်50点​ရွှေ့လိုက်တာဖြစ်ပါတယ်။ရလဒ်ကိုကြည့်ပါ။

旋转

平移လိုမျိုးပါပဲ။မူရင်းပုံကို变换矩阵Mနဲ့​မြှောက်ပြီး​သဏ္ဍာန်​နေရာပြောင်းလဲ​စေ(ရလဒ်အသစ်ရ​စေ)မှာဖြစ်ပါတယ်။ဒီတခါ​မြှောက်မယ့်Mက​တော့旋转矩阵ဖြစ်ပါတယ်။ပုံကိုလှည့်မှာ​စောင်းမှာပါ။လှည့်မယ်ဆို​တော့角度​ထောင့်​တွေလည်းထည့်စဉ်းစားရမယ့်အထဲပါလာပါပြီ။

ပုံမှာပြထားတဲ့O(x0,y0)​နေရာဟာ旋转中心ဖြစ်ပါတယ်။အဲဒီအမှတ်ကိုဗဟိုပြုပြီးရုပ်ပုံကိုလှည့်မှာပါ။မူလလှည့်ချင်​တဲ့​နေရာကP(x,y)က​နေP‘(x’,Y‘)ကို​ရောက်​​စေချင်တာပါ။Center of Rotationနဲ့နဂိုPoint Pကြား​ထောင့်က​နေ၊Pနဲ့P’ကြားကြား​ထောင့်θပမာဏကိုလှည့်​စေချင်တာဖြစ်ပါတယ်။အထက်ပါပုံမှာပြထားသလို变换矩阵MမှာPက​နေP‘​ရောက်​အောင်လှည့်ချင်တဲ့ကြား​ထောင့်ပမာဏθထည့်ပြီးတွက်လိုက်ရင်အသစ်ရလာမယ့်(x’,Y‘)点​တွေကိုရမှာဖြစ်ပါတယ်။ပုံကလည်းတမျိုးတဖုံ​ပြောင်းသွားမှာပါ။

OpenCVမှာ​တော့Mအတွက်旋转矩阵ရဖို့cv2.getRotationMatrix2D函数ကိုအသုံးပြုရပါတယ်။

cv2.getRotationMatrix2D(中心,角度,比例)

中心位置:旋转的中心

角度:旋转角度θ(以度为单位)(+veတန်ဖိုး​တွေထည့်ရင်计数器顺时针လည်မယ့်​ထောင့်ပမာဏဖြစ်ပါတယ်။)

缩放比例:图像ကိုကြီးမလား​သေးမလားမူရင်းအတိုင်းပဲလှည့်မလားဆိုတဲ့因子ဖြစ်ပါတယ်။Defaultက​တော့1ပါပဲ။(Defaultကမူရင်းအတိုင်းပဲလှည့်မှာဖြစ်ပါတယ်။)

ရလာတဲ့矩阵Mကိုမှcv2.warp仿射函数မှာအထက်ကလိုထည့်သွင်းအသုံးပြုလို့ရပါတယ်။

အထက်ကဥပမာမှာဆိုရင်OpenCV徽标ကိုပဲ图像ရဲ့အလယ်တည့်တည့်ကို旋转中心အဖြစ်ယူပြီး逆时针90°လှည့်ထားတာဖြစ်ပါတယ်။မူရင်းအရွယ်အစားအတိုင်းပဲလှည့်ပါတယ်။

仿射变换


အထက်ပါပုံကိုကြည့်ပါ။အိမ်​လေး၃လုံးကို​တွေ့ရပါလိမ့်မယ်။​စောင်း​ပြီးမညီ​နေတဲ့ပုံကိုပြန်ပြီးညီ​အောင်ညှိလိုက်တာဖြစ်ပါတယ်။အဲဒီလိုညီ​အောင်ညှိဖို့​(x,y)က​နေ(x‘,y’)အ​ပြောင်းမှာပြောင်းလဲသွားတဲ့အမှတ်၃မှတ်ကိုသိဖို့လိုအပ်ပါတယ်။

အဲဒီအမှတ်၃မှတ်ပါတဲ့变换矩阵ကိုရှာရမှာပါ။မူရင်း​坐标(x,y)ကိုအမှတ်၃မှတ်နဲ့​ထည့်တွက်လိုက်ရင်​ပြောင်းလဲသွားတဲ့(x‘,y‘)ကိုပြန်ရမှာပါ။ကျ​နော်တို့ကနဂို(x,y)​ရော​ပြောင်းလဲသွားလိုတဲ့(x’,y‘)​ရောသိပြီးဒီအမှတ်၃မှတ်ကိုသိဖို့ပြန်တွက်ရမှာဖြစ်ပါတယ်။အမှတ်၃မှတ်ကိုပြန်တွက်ပြီးပြီဆိုတဲ့အချိန်ကျကျ​နော်တို့ရဲ့(x,y)ကပုံ(x‘,y’)မှာဘယ်လိုအ​နေအထားမျိုးရှိမလဲဆိုတာimshowနဲ့ထုတ်ကြည့်လို့ရပါပြီ။

openCVမာဒီအမှတ်၃မှတ်ပါတဲ့矩阵Mကိုရှာဖို့အတွက်cv2.getAffineTransform函数ကိုအသုံးပြုနိုင်ပါတယ်။

cv2.getAffineTransform(src,dst)

源imgရဲ့坐标

dst:ရ​စေချတဲ့imgရဲ့坐标

ရပြီးမှcv2.warpAddineပြန်သုံးလိုက်ရင်Resultထွက်မယ့်ပုံကိုပြလို့ရပါတယ်။

ဥပမာမှာပုံကို坐标系အသစ်နဲ့​ပြောင်းပြန်翻转လုပ်ပြထားပါတယ်။

Flipဆိုကာမှcv2.翻转(源,模式)လည်းရှိပါတယ်။源က​ပြောင်းချင်တဲ့图像ဖြစ်ပြီး模式မှာ1ဆို水平,垂直0ဆို, -1\f25ဆို၂မျိုးလုံးတပြိုင်နက်Flip​ပေးမှာဖြစ်ပါတယ်။

က​နေ့အတွက်​တော့အသုံးများပြီးသ​ဘောတရားကြားဖူး​စေချင်တဲ့变换ပုံစံ​တွေကိုမိတ်ဆက်​ပေးခဲ့တာပါ။တခြား几何运算符​တွေအ​ကြောင်းနဲ့透视变换​အ​ကြောင်းကို​နောက်ပိုင်း博客​တွေမှာအလျဉ်းသင့်သလိုဆက်လက်​ဆွေး​နွေးသွားပါမယ်။​ကျေးဇူးတင်ပါတယ်ခင်ဗျာ။

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/08/04/%e6%95%b0%e5%ad%97%e5%9b%be%e5%83%8f%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息