首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 呼叫 MATLAB 函數:透過 .NET Assembly 封裝實現圖像處理整合

     編輯:關於.NET

背景動機

C# 實作複雜圖像處理演算法耗時且易出錯,MATLAB 提供豐富工具箱且語法簡潔。透過 MATLAB Builder NE 將 .m 檔編譯為 .NET Assembly,即可在 WPF 應用中直接呼叫,享有兩全其美:MATLAB 算法優勢 + WPF 豐富 UI。

環境版本

  • Visual Studio 2013
  • MATLAB R2012a
  • MATLAB Builder NE(需授權)

步驟 1:建立 MATLAB .NET Assembly

  1. MATLAB 指令視窗輸入 deploytool 或從 Start 按鈕開啟 MATLAB > NE > deploytool。
  2. deploytool 啟動
  3. 專案類型選 .NET Assembly,填寫專案名稱(如 JLFG)。
  4. 建立 .NET Assembly 專案
  5. 右側面板 Add Class 新增類別(如 Iorig),再 Add Files 選入需編譯的 .m 函數檔(如 I_orig.m)。
  6. 新增類別 新增檔案 檔案列表
  7. 點擊 Build 開始編譯。完成後輸出目錄下會有 distrib 與 src 兩資料夾。

步驟 2:WPF 專案加入參考

  1. 參考 MWArray.dll:路徑通常為 MATLAB安裝目錄\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll(64位系統對應 win64)。
  2. 參考 distrib\JLFG.dll(你的組件名稱)。
  3. 加入參考

步驟 3:C# 代碼呼叫

using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using JLFG; // 你的命名空間

public void ProcessImage(string imagePath)
{
    var iorig = new Iorig(); // MATLAB 產生的類別
    // 呼叫 MATLAB 函數:I_orig(inputPath)
    // 注意:MATLAB 函數若有多輸出需用 MWArray[] 接收
    iorig.I_orig(imagePath); 

    // MATLAB 以 imwrite 存檔,WPF 再載入顯示
    ImgPro.Source = new BitmapImage(new Uri(@"C:\I_orig.jpg", UriKind.Absolute));
}

步驟 4:MATLAB 函數寫檔關鍵

MATLAB 函數內部必須使用 imwrite 將結果存為圖檔,WPF 再透過 BitmapImage 載入顯示,無法直接回傳影像物件給 .NET。

已知問題:64 位元系統部署失敗

Win7 32位正常;Win8.1 64位更換 MWArray.dll 為 64 位版本仍報錯(見下圖)。歡迎有經驗的大神分享解決方案。

64位部署錯誤

成果展示

WPF 呼叫 MATLAB 處理結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved