WPF中调用matlab制作的dll进行图像处理

如题:主要的工作和目的是:

  1.建立wpf工程,搭建简单的图像处理的界面(图像的打开、显示和保存);

  2.将wpf读取到的图像文件交给由matlab制作的DLL进行处理(图像的信息读取。调用matla的dll)

  3.将返回的结果进行显示等操作。

【】Matlab的相关检查与准备工作:

  1. 打开Matlab,并在命令行中输入:mbuild -setup

    

    这样matlab就配置好了

 

一、 Matlab的DLL的制作:

  1.最初的matlab函数的代码:

 1 function [gray, Cb, Cr] = RgbToYCbCr(R, G, B)
 2 %将读取到的三通道的信息,整理成浮点型
 3 R = double(R);
 4 G = double(G);
 5 B = double(B);
 6 %声明三个大小想吐的矩阵用来存储变换过的信息
 7 [r,c,d]=size(R);
 8 gray=zeros(r,c);
 9 Cr=zeros(r,c);
10 Cb=zeros(r,c);
11 %变换过程
12 for i=1:r
13 for j=1:c
14      gray(i,j) = 0.2290 * R(i,j) + 0.5780 * G(i,j) + 0.1140 * B(i,j);   
15      Cr(i,j) = 0.50 * R(i,j) - 0.4187 * G(i,j) - 0.0813 * B(i,j) + 128;
16      Cb(i,j) = -0.1687 * R(i,j) - 0.3313 * G(i,j) + 0.5 * B(i,j) + 128;
17 end
18 end
19 %整理
20 gray=uint8(gray);
21 Cb=uint8(Cb);
22 Cr=uint8(Cr);
23 %显示
24 figure(1);
25 imshow(gray, []);
26 
27 figure(2);
28 imshow(Cb, []);
29 
30 figure(3);
31 imshow(Cr, []);
View Code

    以上代码的功能是实现图像由RGB色度空间大YCbCr色度空间的转换

  2.建立一个matlab的工程,将刚刚写好的函数程序包含进去:

    (1) File->new->Deployment Project:

      

    (2) 在右上角为工程添加类和已经编写好的.m文件:

      ------>

      最好是先1后2的顺序,先添加class后添加file文件

    (3) 点击build界面右边的的齿轮图表->Build选项:

      

                     --->   

      这个过程要花费大概5、6分钟的时间。

      最终生成的文件情况:

        

二、 WPF的操作部分:

  1. 将上述生成文件其中的RGB_YCbCr.dll和RGB_YCbCrNative.dll添加到wpf工程的引用中

    并在程序的头部添加相应的引用:

1 using MathWorks.MATLAB.NET.Arrays;
2 using MathWorks.MATLAB.NET.Utility;
3 using RGB_YCbCr;
View Code

  2. 下面是对matlab的dll的调用了:

 1 //由于Pixels包含是4个通道的像素信息,应该将其拆开
 2                         double[,] r_Pixels = new double[imgHeight, imgWidth];
 3                         double[,] g_Pixels = new double[imgHeight, imgWidth];
 4                         double[,] b_Pixels = new double[imgHeight, imgWidth];
 5                         for (int i = 0; i < imgHeight; ++i)
 6                         {
 7                             for (int j = 0; j < imgWidth; ++j)
 8                             {
 9                                 //Pixels是包含图像的所有信息的矩阵变量
10                                 r_Pixels[i, j] = Pixels[i][j].R;
11                                 g_Pixels[i, j] = Pixels[i][j].G;
12                                 b_Pixels[i, j] = Pixels[i][j].B;
13                             }
14                         }
15 
16                         //对由matlab编写的dll的调用
17                         RGB_YCbCr.RGB_YCbCr dc = new RGB_YCbCr.RGB_YCbCr();
18                         MWArray result = null;
19                         result = dc.RgbToYCbCr((MWNumericArray)r_Pixels, (MWNumericArray)g_Pixels,
20                             (MWNumericArray)b_Pixels);
21                         //将处理后得到的结果转化为C#的数据矩阵
22                         MWNumericArray temp = (MWNumericArray)result;
23                         Array array = temp.ToArray(MWArrayComponent.Real);
View Code

    代码的前面几行是怎样从保存图像的数据矩阵中提取R、G、B三通道信息的

三、 这样程序就可以用了:

    我这里的运行结果是三张图,我们可以根据需要选择是否保存最终显示的图像:

    注意:程序在运行的过程中等待的时间会比较长。

    运行结果:

    

    

 

 

转载于:https://www.cnblogs.com/Joyes1989/p/3101605.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值