C#生成影像金字塔的原理實(shí)例
這里首先先講一下金字塔的原理:
影像金字塔就是把一個(gè)原始圖像處理成一個(gè)類(lèi)似于塔狀的影像結(jié)構(gòu)(請(qǐng)不要糾結(jié)于這個(gè)概念)
在影像金字塔中最精細(xì)層的分辨率為16*16,下一層是8*8,依次為4*4,2*2,1*1
如下圖所示:
圖中網(wǎng)格頂點(diǎn)表示原始圖像16*16;紅色差號(hào)代表8*8;黑色圓圈代表4*4.
按照上述原理,那么編程實(shí)現(xiàn)不過(guò)就是隔點(diǎn)采樣,那么相鄰兩幅圖像在對(duì)應(yīng)點(diǎn)上的灰度值應(yīng)該相等,當(dāng)然我是這么想的。
C#在Drawing命名空間下的Bitmap類(lèi)里面有一個(gè)處理影像金字塔的函數(shù),
public void mipmaping()
{
Bitmap jpgsource =new Bitmap(@"E:\height512.jpg");
Bitmap jpgTarget = new Bitmap(jpgsource, jpgsource.Width>>1, jpgsource.Height>>1);
jpgTarget.Save(@"E:\height256.jpg");
}
但是經(jīng)過(guò)我逐像素對(duì)比之后,發(fā)現(xiàn)這兩張圖上對(duì)應(yīng)點(diǎn)的像素并不相等,這說(shuō)明一個(gè)問(wèn)題:C#里的這個(gè)方法肯定不是按照逐點(diǎn)采樣,而是采用某種方法把圖像拉伸的。這似乎不太符合金字塔的原理,所以我又重新寫(xiě)了一個(gè)金字塔的函數(shù):
public void Rescale()
{
Bitmap myImage1024 = new Bitmap(@"E:\height.jpg");
int width = myImage1024.Height; ;
int height = myImage1024.Width; ;
Console.WriteLine(DateTime.Now.ToString());
for (int power = 1; power < 3; power++)
{
Bitmap myImage = new Bitmap(width >> power, height >> power);
int row = myImage.Height;
int column = myImage.Width;
for (int i = 0; i < row; i++)
for (int j = 0; j < column; j++)
{ //這里是精要,實(shí)際上就是按照采樣間距 踩點(diǎn)
int i1024 = getcoor(i, power); int j1024 = getcoor(j, power);
Color color1024 = myImage1024.GetPixel(i1024, j1024);
myImage.SetPixel(i, j, color1024);
}
myImage.Save(string.Format(@"E:\myjpg\height{0}.jpg", width >> power));
}
Console.WriteLine(DateTime.Now.ToString());
}
public int getcoor(int i,int power)
{
if (power > 1)
return 2 * getcoor(i,power-1) +1;
else
return 2 * i + 1;
}
按照我寫(xiě)的這個(gè)函數(shù)來(lái)建造金字塔,此時(shí)相鄰圖層之間的對(duì)應(yīng)點(diǎn)像素值就相等了。
相關(guān)文章
C#實(shí)現(xiàn)將PDF轉(zhuǎn)為Excel的方法詳解
通常,PDF格式的文檔能支持的編輯功能不如office文檔多,針對(duì)PDF文檔里面有表格數(shù)據(jù)的,如果想要編輯表格里面的數(shù)據(jù),可以將該P(yáng)DF文檔轉(zhuǎn)為Excel格式。本文將介紹如何利用C#實(shí)現(xiàn)PDF轉(zhuǎn)Excel,需要的可以參考一下2022-04-04C# menuStrip控件實(shí)現(xiàn)鼠標(biāo)滑過(guò)自動(dòng)彈出功能
MenuStrip 控件是 Visual Studio 和 .NET Framework 中的功能。使用該控件,可以輕松創(chuàng)建 Microsoft Office 中那樣的菜單。本文給大家分享menuStrip鼠標(biāo)滑過(guò)自動(dòng)彈出效果2021-07-07在WinForm中發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇在WinForm中發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06C# WPF利用Clip屬性實(shí)現(xiàn)截屏框功能
這篇文章主要為大家詳細(xì)介紹了C# WPF如何利用Clip屬性實(shí)現(xiàn)截屏框功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01C#微信公眾平臺(tái)開(kāi)發(fā)之a(chǎn)ccess_token的獲取存儲(chǔ)與更新
這篇文章主要介紹了C#微信公眾平臺(tái)開(kāi)發(fā)之a(chǎn)ccess_token的獲取存儲(chǔ)與更新的相關(guān)資料,需要的朋友可以參考下2016-03-03