新聞中心

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

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

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

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

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

function [sheet,col] = CSheetSelected(filePath)

[typ, sheet] = xlsfinfo(filePath);

[row,col] = size(sheet);

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

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

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

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

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

//在Excel讀入時(shí)已經(jīng)完成了二維數(shù)組輸出的關(guān)鍵步驟,即輸出時(shí)將二維數(shù)組轉(zhuǎn)換為一維數(shù)組。但在VC平臺(tái)接收還原為二維時(shí)要注意,數(shù)組存儲(chǔ)方式是按列存儲(chǔ),而VC平臺(tái)下數(shù)組是按行存儲(chǔ),所以轉(zhuǎn)換時(shí)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文件讀取時(shí)類似,將二維輸出轉(zhuǎn)換為一維數(shù)組進(jìn)行輸出

(2) 保存后,封裝打包為COM組件,并完成注冊(cè)等相關(guān)操作。在PCA工程對(duì)話框上添加一個(gè)名為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ù)對(duì)輸入輸出數(shù)據(jù)維數(shù)進(jìn)行變換來(lái)完成操作。

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




評(píng)論


相關(guān)推薦

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

關(guān)閉