<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

          Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

          作者: 時間:2012-05-31 來源:網(wǎng)絡(luò) 收藏

          上述C++代碼中省略了異常處理和相關(guān)的內(nèi)存、COM釋放代碼,由于代碼比較簡單所以不做進(jìn)一步解析。請注意,下面將省略COM初始化及實(shí)例化等相同代碼。

          (3) 需要重點(diǎn)說明的是該方法的擴(kuò)展性。通常Excel文件中保存多個工作區(qū),有時用戶可能需要打開同一Excel文件中不同工作區(qū)中的數(shù)據(jù),常規(guī)方法實(shí)現(xiàn)過于復(fù)雜,但對于本文介紹的方法可以通過修改添加幾條語句即可實(shí)現(xiàn)。首先,新建一個m文件用來處理工作區(qū)的選擇,代碼如下:

          function [sheet,col] = CSheetSelected(filePath)

          [typ, sheet] = xlsfinfo(filePath);

          [row,col] = size(sheet);

          由于返回值是一個cell,所以VC平臺要使用CStringArray數(shù)據(jù)結(jié)構(gòu)保存返回值,并顯示各工作區(qū)名稱供用戶選擇。然后,通過人機(jī)交互將用戶選擇的工作區(qū)參數(shù)保存并傳遞至CExcelRead.m,通過在CExcelRead.m增加一個工作區(qū)選擇參數(shù),并對代碼稍作修改即可。

          2 二維參數(shù)的傳遞與輸出[2]

          下面以主成分分析為例介紹基于COM的與VC混合編程中二維參數(shù)處理。

          (1) 主成分分析pcamat.m代碼如下:

          function [eigenvector,eigenvalue] = pcamat(oriData,row,column)

          //在Excel讀入時已經(jīng)完成了二維數(shù)組輸出的關(guān)鍵步驟,即輸出時將二維數(shù)組轉(zhuǎn)換為一維數(shù)組。但在VC平臺接收還原為二維時要注意,數(shù)組存儲方式是按列存儲,而VC平臺下數(shù)組是按行存儲,所以轉(zhuǎn)換時0~row-1為第一列,row~2*row-1為第二列,以此類推。本文輸入?yún)?shù)oriData是一維數(shù)組,所以要將其還原為二維數(shù)組使程序能夠正常運(yùn)行,即下一行代碼所示。

          oriData = reshape(oriData,row,column);

          dataSTD=std(oriData,0,1); dataMean = mean(oriData);

          dataSR = (oriData-dataMean(ones(row,1),:))./dataSTD(ones(row,1),:);

          [eigenvector,newdata,eigenvalue,Exa]=princomp(dataSR);

          //第三行至此處均為主成分分析內(nèi)容

          eigenvector = reshape(eigenvector,column*column,1);

          //與Excel文件讀取時類似,將二維輸出轉(zhuǎn)換為一維數(shù)組進(jìn)行輸出

          (2) 保存后,封裝打包為COM組件,并完成注冊等相關(guān)操作。在PCA工程對話框上添加一個名為PCATest的按鈕控件,核心代碼如下:

          VARIANT oriData,row,column,eigVector,eigValue;

          VariantInit(oriData); //參數(shù)初始化

          oriData.vt = VT_R8|VT_ARRAY;

          //定義SAFEARRAY類型的一維數(shù)組

          SAFEARRAYBOUND rgsadound[1];

          rgsadound[0].lLbound = 0;

          rgsadound[0].cElements = m_row*m_col;

          oriData.parray = SafeArrayCreate(VT_R8,1,rgsadound);

          oriData.parray->pvData = m_originData;

          //完成相關(guān)設(shè)置后,將第一步讀入的數(shù)據(jù)錄入到oriData中,即賦給pcamat的oriData。到此完成了二維數(shù)組的傳遞

          row.vt = VT_I4; col.vt = VT_I4;

          row.lVal = m_row; col.lVal = m_col;

          pca->pcamat(2,eigVector,eigValue,oriData,row,col);

          memcpy(result, eigVector.parray->pvData,m_col*m_col*

          sizeof(double));

          綜上,二維數(shù)組參數(shù)處理就是使用reshape()函數(shù)對輸入輸出數(shù)據(jù)維數(shù)進(jìn)行變換來完成操作。

          c++相關(guān)文章:c++教程




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();