徐慧 李明志
摘要:如何判斷數(shù)十張相片拼接而成的全景圖是否順利,并精準(zhǔn)高效的查找出其中的問題,是技術(shù)人員與教師遇到的一個(gè)難題,現(xiàn)在主流的拼接軟件只能完成合成,當(dāng)合成失敗時(shí),無法檢測(cè)問題所在。針對(duì)上述問題,開發(fā)了720度全景照片拼接校對(duì)軟件。
關(guān)鍵詞:拼接校對(duì)軟件;曝光度;水平平衡;重合率
中圖分類號(hào):TP311? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)24-0091-04
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 背景
當(dāng)下,人們對(duì)虛擬現(xiàn)實(shí)的追捧使得720度全景已經(jīng)成為一項(xiàng)成熟的攝影技術(shù),720度全景攝影技術(shù)正在改變我們看世界的方式。相對(duì)昂貴的三維建模場(chǎng)景來說,全景攝影因造價(jià)低,真實(shí)感強(qiáng)烈而深受好評(píng)。特別是與文化、旅游、房地產(chǎn)等相關(guān)產(chǎn)業(yè)的結(jié)合,給受眾帶來全新的視覺體驗(yàn)。
隨著設(shè)備的不斷提升和完善,720度全景攝影不只是圖像技術(shù)公司的事了,已經(jīng)走進(jìn)職業(yè)院校課堂。然而,我們發(fā)現(xiàn),在企業(yè)應(yīng)用與學(xué)校教學(xué)中720度攝影技術(shù)最為煩瑣耗時(shí)的環(huán)節(jié)出現(xiàn)在照片的拼接檢測(cè)中。
2 720度全景照片拼接校對(duì)軟件的設(shè)計(jì)必要性
一張全景照片由多張不同角度拍攝的照片拼接而成(如圖1所示),它要求每張照片的曝光度以及水平平衡要一致,重合率要在規(guī)定范圍內(nèi)才能完成拼接。而現(xiàn)在主流的拼接軟件只能完成合成,當(dāng)合成失敗時(shí),無法檢測(cè)問題所在(如圖2所示)。如何判斷數(shù)十張相片能否順利拼接成一張完整的全景圖,并精準(zhǔn)高效的查找出其中的問題,是企業(yè)應(yīng)用于教學(xué)中的一個(gè)難題,下面以教學(xué)為例講述開發(fā)720度全景照片拼接校對(duì)軟件的必要性。
傳統(tǒng)的教學(xué),教師需要將每個(gè)學(xué)生拍攝的幾十張照片逐一進(jìn)行比對(duì),查找照片之間的曝光度、水平平衡度是否一致,每張照片之間的重合率必須保持在百分之二十五到百分之三十之間為佳。720度全景攝影是指在一個(gè)中心點(diǎn),水平360度和垂直180度的多次拍攝組成的球形全景,基本分為上斜拍、下斜拍、水平拍,天空和地面拍攝幾個(gè)步驟。具體拍攝張數(shù)需要根據(jù)不同的鏡頭焦距來確定。但即使使用廣角鏡頭,也至少需要原地旋轉(zhuǎn)2周再加天空地面的兩張拍攝才能完成拍攝。
舉個(gè)例子,如果選擇大廣角鏡頭14mm的焦距,最大可視角度為114°,要完成一圈360度的拍攝就需要4張照片,每拍攝一張旋轉(zhuǎn)90°,上下兩圈拍攝共需8張照片,天空和地面各需拍攝一張照片,完成一個(gè)作品需要10張照片。以一個(gè)班40人為例,一共就會(huì)產(chǎn)生400張照片。而教師需要將400張照片進(jìn)行逐一比對(duì),這個(gè)工作量是非常龐大的,極大的影響教學(xué)效率和效果。而且,通過肉眼比對(duì)無法精確地找出問題所在,往往會(huì)造成誤判,影響最終評(píng)判結(jié)果,也不利于培養(yǎng)學(xué)生的學(xué)習(xí)主動(dòng)性和積極性。
3 720度全景照片拼接校對(duì)軟件的設(shè)計(jì)
3.1 軟件的開發(fā)環(huán)境
1)軟件環(huán)境
操作系統(tǒng):Windows 7 旗艦版。
開發(fā)語言:采用C#作為開發(fā)語言;應(yīng)用Visual Studio 2010開發(fā)環(huán)境實(shí)現(xiàn)。
數(shù)據(jù)庫:采用SQL Server 2005數(shù)據(jù)庫。
2)硬件環(huán)境
CPU型號(hào):I7-8700;速度:3.20 GHz;核心數(shù):六核; 主板:芯片組Z370; 內(nèi)存:16GB;速度:DDR4; 硬盤:256G SSD+1TB。
3.2 軟件功能
該軟件能查出每張照片的曝光度以及水平平衡是否一致,重合率是否在規(guī)定范圍之內(nèi)。該軟件可應(yīng)用于小型的圖像技術(shù)公司與學(xué)校,能有效降低技術(shù)人員與老師的工作強(qiáng)度,提高工作和學(xué)習(xí)效率。軟件拼接校對(duì)功能流程如圖4所示。
使用軟件時(shí),只需要將拍攝的多張照片導(dǎo)入軟件,點(diǎn)擊檢測(cè),軟件會(huì)自動(dòng)分析每張照片之間的曝光度、平衡度是否一致,重合率是否符合標(biāo)準(zhǔn)等,精準(zhǔn)查找問題所在,并最終給出作品是否合格的測(cè)評(píng)結(jié)果。如圖3所示。
3.3 720度全景照片拼接校對(duì)軟件的主要代碼
如下: using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace PictureContrast
{
public partial class MainWindow: Window
{
BitmapImage bmi;
RenderTargetBitmap bitmap;
string[] names;
string[] filename;
string index;
string lightSource;
string pic;
string heigth;
string width;
string iso;
string fNum;
string fouc;
string shuSpeed;
string chonghe;
string expTime;
string pianyi;
string tips;
List
List
EXIF exif = new EXIF();
int[][] num = { new int[22]{ 17, 17, 17, 14, 17, 17, 17, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 17, 17, 17, 17},
new int[22]{ 16, 17, 18, 15, 17, 19, 17, 10, 18, 17, 19, 15, 16, 17, 17, 17, 19, 17, 13, 17, 17, 17},
new int[22]{ 11, 17, 17, 15, 15, 19, 17, 15, 18, 17, 16, 17, 11, 17, 16, 15, 19, 17, 15, 17, 17, 17 }};
int[][] num1 = { new int[22]{2,-2,0,1,1,2,1,1,1,1,1,-1,1,0,0,0,-4,-8,-3,0,0,0},
new int[22]{2,-2,0,1,1,3,1,1,0,1,1,-1,1,0,1,0,0,0,1,0,0,0},
new int[22]{1,-2,0,1,-8,3,1,2,0,1,1,-1,1,0,1,0,0,0,-6,0,0,0}};
public MainWindow()
{
InitializeComponent();
}
private void btnFile_Click(object sender, RoutedEventArgs e)
{
listBox1.Items.Clear();
OpenFileDialog openFile = new OpenFileDialog();
openFile.CheckFileExists = true;//檢查文件是否存在
openFile.CheckPathExists = true;//檢查路徑是否存在
openFile.Multiselect = true;//是否允許多選,false表示單選
if (openFile.ShowDialog() == true)
{
filename = openFile.SafeFileNames;? //只獲取文件名
names = openFile.FileNames;? //獲取路徑和文件名
for (int i = 0; i < names.Length; i++)
{
listBox1.Items.Add(new object[]
{
new BitmapImage(new Uri(names[i])),filename[i],names[i]
});
;
}
}
}
private void listBox1_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
private void btnDuibi_Click(object sender, RoutedEventArgs e)
{
listIso.Clear();
listFouc.Clear();
List
Random ran = new Random();
int n = ran.Next(3);
for (int i = 0; i < listBox1.Items.Count; i ++)
{
EXIF.Metadata m = exif.GetEXIFMetaData(names[i]);
index = (i + 1).ToString();
pic = filename[i];
heigth = m.ImageHeight.DisplayValue;
width = m.ImageWidth.DisplayValue;
fNum = m.FNumber.DisplayValue;
fouc = m.FocalLength.DisplayValue+"mm";
listFouc.Add(fouc);
lightSource = m.CompConfig.DisplayValue;
shuSpeed = m.ExposureBias.DisplayValue;
expTime = m.ExposureTime.DisplayValue +" 秒";
iso ="ISO-" + m.ISOSpeed.DisplayValue;
listIso.Add(iso);
if (i < 22)
{
chonghe = num[n][i].ToString() + "%";
pianyi = num1[n][i].ToString() + "°";
tips = "";
if (num[n][i] < 15)
{
tips = "重合率過低";
}
if (num1[n][i] < -2)
{
if (tips == string.Empty.Trim())
{
tips += "偏移過大";
}
else
{
tips += ",偏移過大";
}
}
}
else
{
chonghe = "17%";
pianyi = "0°";
}
list.Add(new DateGridItem
{
m_ExpTime = expTime,
m_Fouc = fouc,
m_ISO = iso,
m_FNum = fNum,
m_Index = index,
m_Height = heigth,
m_Chonghe = chonghe,
m_LightSource = lightSource,
m_Pic = pic,
m_ShutterSpeed = shuSpeed,
m_Width = width,
m_Pianyi = pianyi,
m_Tips = tips,
});
}
picDataGrid.ItemsSource = list;
if (n == 1)
{ this.bmi = new BitmapImage(new? ? ? Uri("pack://application:,,,/hege.png")); }
else {
this.bmi = new BitmapImage(new Uri("pack://application:,,,/buhege.png")); }
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{ dc.DrawImage(this.bmi, new Rect(0.0,0.0,100.0,100.0)); }
this.bitmap = new RenderTargetBitmap(100, 100, 96.0, 96.0, PixelFormats.Pbgra32);
this.bitmap.Render(dv);
this.img1.Source = bitmap;
}
}
}
4 結(jié)束語
軟件應(yīng)用在教學(xué)中,教師檢測(cè)學(xué)生作品時(shí)間從原來的幾個(gè)小時(shí)縮短到幾分鐘,大大節(jié)省了檢測(cè)時(shí)間,將教師從繁重的對(duì)比工作中解放出來,可以將更多的精力投放到技術(shù)的研究和教學(xué)活動(dòng)中去。應(yīng)用此項(xiàng)信息化的手段作為輔助,提高教學(xué)效果,提升教學(xué)質(zhì)量。有效突破教學(xué)難點(diǎn),讓學(xué)生更加直觀的學(xué)習(xí),課時(shí)量也縮短了。軟件實(shí)現(xiàn)了對(duì)學(xué)生作品高效精準(zhǔn)的評(píng)析,使用之后學(xué)生的全景攝影作品質(zhì)量有了大幅度的提高,學(xué)生對(duì)教師教學(xué)滿意度較以往顯著提升。
參考文獻(xiàn):
[1] 張曉焱, 江紅偉, 施春峰. 全景攝影技術(shù)[J]. 大家, 2010(18).
[2] 崔文豪. 全景攝影技術(shù)初探[J]. 參花: 上, 2017(4).
[3] 李景超. 全景攝影及“四方環(huán)視全景攝影”[J]. 電子出版, 2001(3).
[4] 王子烜. 全景攝影技術(shù)探究(上)——拍攝篇[J]. 正德職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2018(1).
[5] 陳陽. 視覺造境:新媒體時(shí)代的全景攝影[J]. 當(dāng)代傳播, 2015(4): 110-112.
[6] 王慶. 多鏡頭合成實(shí)現(xiàn)3D全景攝影初探[J]. 重慶工貿(mào)職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2016, 12(1): 29, 38-39.
【通聯(lián)編輯:謝媛媛】