如何在.net中将位图转换为MWArray(Matlab Array)

本文关键字:MWArray Matlab Array 转换 位图 net | 更新日期: 2023-09-27 17:52:48

我在Matlab上写了一个算法。因此我想在。net上使用它。我完美地将。m文件转换为。dll,以便在。net上使用Matlab库编译器。首先,我尝试将Matlab函数转换为没有任何参数的。dll,它在。net上工作得很好。然而,当我想使用带参数的函数时,我在下面得到一些错误。参数基本上是image。我在Matlab中像这样调用函数I = imread('xxx.jpg'); Detect(I);所以我的c#代码像这样

    static void Main(string[] args)
    {
        DetectDots detectDots = null;
        Bitmap bitmap = new Bitmap("xxx.jpg");
        //Get image dimensions
        int width = bitmap.Width;
        int height = bitmap.Height;
        //Declare the double array of grayscale values to be read from "bitmap"
        double[,] bnew = new double[width, height];
        //Loop to read the data from the Bitmap image into the double array
        int i, j;
        for (i = 0; i < width; i++)
        {
            for (j = 0; j < height; j++)
            {
                Color pixelColor = bitmap.GetPixel(i, j);
                double b = pixelColor.GetBrightness(); //the Brightness component
                bnew.SetValue(b, i, j);
            }
        }
        MWNumericArray arr = bnew;
        try
        {
            detectDots = new DetectDots();
            detectDots.Detect(arr);
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

我使用了我称为xxx.jpg的相同图像,它是5312 x 2988。但是我在下面得到这个错误。

... MWMCR::EvaluateFunction error ... 
Index exceeds matrix dimensions.
Error in => DetectDots.m at line 12.
... Matlab M-code Stack Trace ...
    at
file C:'Users'TAHAME~1'AppData'Local'Temp'tahameral'mcrCache9.0'MTM_220'MTM'DetectDots.m, name DetectDots, line 12.

重要的是,它说"索引超过矩阵维度",这是真正的方式转换位图到MWArray?有什么问题吗?

如何在.net中将位图转换为MWArray(Matlab Array)

我意识到c#中的行对应于MWarray中的列。所以我对代码做了一些小改动。

我用double[,] bnew = new double[height, width];代替double[,] bnew = new double[width, height];

我用bnew.SetValue(b, j, i);代替bnew.SetValue(b, i, j);

有人可能会在

下面使用Bitmap to MWArray的整个代码
        Bitmap bitmap = new Bitmap("001-2.bmp");
        //Get image dimensions
        int width = bitmap.Width;
        int height = bitmap.Height;
        //Declare the double array of grayscale values to be read from "bitmap"
        double[,] bnew = new double[height, width];
        //Loop to read the data from the Bitmap image into the double array
        int i, j;
        for (i = 0; i < width; i++)
        {
            for (j = 0; j < height; j++)
            {
                Color pixelColor = bitmap.GetPixel(i, j);
                double b = pixelColor.GetBrightness(); //the Brightness component
                //Note that rows in C# correspond to columns in MWarray
                bnew.SetValue(b, j, i);
            }
        }
        MWNumericArray arr = bnew;