2018-10-07 21:09:29 Ryan_lee9410 阅读数 310

 

目录

一、Matlab常用的统计函数

二、图像的读写、显示


一、Matlab常用的统计函数

求和 sum(X) 最小值 min(X)
均值 mean(X) 最大值 max(X)
x的平方根 sqrt(x) 标准差 std(X)
方差 var(X)或cov(X) 协方差 cov(X,Y)

MATLAB标准函数的功能可在命令行方式“>>”下,输入“help 函数名”查看。若不知道准确的函数名称,可通过输入“lookfor 关键字”模糊查找相关的函数或命令。

二、图像的读写、显示

(1)MATLAB也提供的图像类型转换函数
如:A = rgb2gray(RGB)                              %将真彩色图像转换成灰度图像

(2)MATLAB提供的图像读、写、显示函数
如:A = imread(‘file name.后缀名’)              %将图像读入数组A中
如:imshow(a)                                             %显示图像a
如:imwrite(a,‘图像文件名2’)                       %将图像a保存为某图像文件

(3)RGB空间与CMY空间的转换
如:I2=imcomplement(I1)                            %图像I1的补

(4)RGB空间与HSV空间的转换
如:HSV=rgb2hsv(RGB)                             %RGB空间转成HSV空间
如:RGB=hsv2rgb(HSV)                             %HSV空间转成RGB空间
 

不定期更新。。。

 

 


整理不易,打赏请扫二维码,感谢您的支持!

2014-08-08 17:18:24 u011886588 阅读数 2918



Matlab 图像处理  Day8


           1、sum( ):

                %  sum 函数有常用的 2 种形式

                     < i >、 S = sum( X );

                     < ii >、 S = sum( X,DIM );


                Sample:

                        


                   % 由上述例子可以发现

                            sum( a , 1 ) = sum( a )         % 意思即为对矩阵 a 的列求和

                            sum( a , 2 )                          % 意思即为对矩阵 a 的行求和


                   % 一些特殊的小用法:

                         


                          sum( a(:) );    % 意思即为对矩阵中所有元素求和



                          可以通过上述写法扩展一下:

                          Sample :

                                         分别按列求和                                                    分别按行求和                    

                                                                










           


   



2019-11-06 23:19:26 weixin_37517391 阅读数 104

第5次图像处理作业

单位:计算技术研究所
姓名:蔡少斐
学号:2019E8013261007

1. 复习理解课本中最佳陷波滤波器进行图像恢复的过程,请推导出w(x,y)最优解的计算过程.

根据公式:

σ2=1(2a+1)(2b+1)[gwη(gˉwηˉ)]2\sigma ^2= \frac{1}{(2a+1)(2b+1)}\sum\sum[g-w\eta - (\bar g-w\bar\eta)]^2

σ2w=2(2a+1)(2b+1)[gwη(gˉwηˉ)][η+ηˉ]=0\frac{\partial \sigma^2}{\partial w}=\frac{2}{(2a+1)(2b+1)}\sum\sum[g-w\eta - (\bar g-w\bar\eta)][-\eta+\bar\eta] = 0

(ggˉ)(η+ηˉ)+w(η+ηˉ)(η+ηˉ)=0\sum\sum(g-\bar g)(-\eta+\bar \eta) + \sum\sum w(-\eta+\bar \eta)(-\eta+\bar \eta) =0

w=(ggˉ)(η+ηˉ)(η+ηˉ)(η+ηˉ)w=\frac{\sum\sum(g-\bar g)(-\eta+\bar \eta)}{\sum\sum (-\eta+\bar \eta)(-\eta+\bar \eta)}

w=1(2a+1)(2b+1)(ggˉ)(η+ηˉ)1(2a+1)(2b+1)(η+ηˉ)(η+ηˉ)w=\frac{\frac{1}{(2a+1)(2b+1)}\sum\sum(g-\bar g)(-\eta+\bar \eta)}{ \frac{1}{(2a+1)(2b+1)}\sum\sum (-\eta+\bar \eta)(-\eta+\bar \eta)}

w=1(2a+1)(2b+1)((gηˉgˉηˉ)+(gη+gˉη))1(2a+1)(2b+1)(η2+ηˉ22ηηˉ)w = \frac{\frac{1}{(2a+1)(2b+1)}(\sum\sum(g\bar\eta-\bar g\bar\eta)+\sum\sum(-g\eta+\bar g \eta))}{ \frac{1}{(2a+1)(2b+1)}(\sum\sum \eta^2 +\sum\sum\bar\eta^2-2\sum\sum\eta\bar\eta)}

根据

1(2a+1)(2b+1)(gηˉgˉηˉ)=0\frac{1}{(2a+1)(2b+1)}\sum\sum(g\bar\eta-\bar g\bar\eta) = 0

1(2a+1)(2b+1)((gηˉgˉηˉ)+(gη+gˉη))=gnˉgˉnˉ\frac{1}{(2a+1)(2b+1)}(\sum\sum(g\bar\eta-\bar g\bar\eta)+\sum\sum(-g\eta+\bar g \eta))={\bar{gn}-\bar g \bar n}

1(2a+1)(2b+1)(ηˉ22ηηˉ)=ηˉ2{ \frac{1}{(2a+1)(2b+1)}(\sum\sum\bar\eta^2-2\sum\sum\eta\bar\eta)}=\bar \eta^2

那么

w=gnˉgˉnˉη2ˉηˉ2w = \frac{\bar{gn}-\bar g \bar n}{\bar{\eta^2}-\bar \eta ^2}

2.考虑在x方向均匀加速导致的图像模糊问题。如果图像在t = 0静止,并用均匀加速x0(t) = at2/2加速,对于时间T, 找出模糊函数H(u, v), 可以假设快门开关时间忽略不计。

新图像函数为

g(x,y)=0Tf[xx0(t),yy0(t)]dtg(x,y)=\int _0 ^T f[x-x_0(t),y-y_0(t)]dt

G(u,v)=g(x,y)ej2π(ux+vy)dxdyG(u,v)=\int\int g(x,y)e^{-j2\pi(ux+vy)}dxdy

=(0Tf[xx0(t),yy0(t)]dt)ej2π(ux+vy)dxdy=\int\int(\int_0^Tf[x-x_0(t),y-y_0(t)]dt)e^{-j2\pi(ux+vy)}dxdy

=0T(f[xx0(t),yy0(t)]ej2π(ux+vy)dxdy)dt=\int_0^T(\int \int f[x-x_0(t),y-y_0(t)]e^{-j2\pi(ux+vy)}dxdy)dt

=0TF(u,v)ej2π(ux0(t)+vy0(t))dt=\int_0^TF(u,v)e^{-j2\pi(ux_0(t)+vy_0(t))}dt

=F(u,v)0Tej2π(ux0(t)+vy0(t))dt=F(u,v)\int_0^{T} e^{-j2\pi(ux_0(t)+vy_0(t))}dt

因此模糊函数为

H(u,v)=0Tej2π(ux0(t)+vy0(t))dt=0Tejπuat2dtH(u,v)=\int_0^{T} e^{-j2\pi(ux_0(t)+vy_0(t))}dt=\int_0^T e^{-j\pi uat^2}dt

3.已知一个退化系统的退化函数H(u,v), 以及噪声的均值与方差,请描述如何利用约束最小二乘方算法计算出原图像的估计。

F^(u,v)=[H(u,v)H(u,v)2+γP(u,v)2]G(u,v)......\widehat{F}(u,v)=[\frac{H^*(u,v)}{|H(u,v)|^2+\gamma |P(u,v)|^2}]G(u,v)......*

设定其残差r=gHf^r = g-H\widehat{f}

应有r2=η2||r||^2=||\eta||^2

(1)给定γ\gamma一个初始值
(2)计算r2||r||^2
(3)若满足r2η2||r||^2-||\eta||^2处于某一个精度范围之内则结束,否则更新γ\gamma大小,可以采用牛顿法.
(4)使用计算到的γ\gamma值代入()(*)式中计算
(5)通逆傅里叶变换得到图像.

在计算r2η2||r||^2-||\eta||^2的时候,其中η2||\eta||^2的计算需要依赖于噪声的方差和均值.

η2=MN[σ2m]||\eta||^2=MN[\sigma^2-m]

2019-09-12 17:43:48 weixin_41887615 阅读数 139

高斯滤波器的模板算子生成

原理:

代码:

//生成高斯滤波函数
QVector<QVector<double>> generateGaussian(int size,double sigma)
{

    int i = 0, j = 0;
    double sum = 0.0;
    int center = size / 2; //中点坐标

    //创建高斯核函数
    QVector<double> col(size,0);
    QVector<QVector<double>> gaussian;
    for(i = 0; i<size; i++)
    {
        gaussian.push_back(col);
    }


    for(i = 0; i<size; i++)
    {
        for(j = 0; j<size; j++)
        {
           gaussian[i][j] = (1.0 / (2*PI*sigma*sigma))*exp(-((pow((i-center),2.0) + pow((j-center),2.0)) / (2*sigma*sigma)));
           sum += gaussian[i][j];
        }
    }

    //归一化
    for(i = 0; i<size; i++)
    {
        for(j = 0; j<size; j++)
        {
            gaussian[i][j] = gaussian[i][j] / sum;
            cout<<gaussian[i][j];
            cout<<" ";
        }
        cout<<endl<<endl;
    }

    return gaussian;
}

generateGaussian(3,1.8);

在这里插入图片描述

2012-12-06 14:44:48 kupe87826 阅读数 1264

环境:系统win7,32位,处理器,AMD Athlon(tm) II X3 425 Processor 2.70 GHz

 

 在《一个很难调试的遥感图像处理BUG》(http://blog.csdn.net/kupe87826/article/details/8257504)文章中,我最后用下面这两句代码解决了bug问题。

    x2sum+=xBuffer[i*nw+j]*(double)xBuffer[i*nw+j];

    y2sum+=yBuffer[i*nw+j]*(double)yBuffer[i*nw+j];

     但是我开始思考浮点运算的效率问题。因为现在大多数图像都是整型的,如果浮点运算效率不高,这样估计影像整体计算效率。所以我在我通用模板的基础上,增加了模板的特化。

double cof2< unsigned short int ,unsigned short int>(int bandx,int bandy,GDALDataset*pDataSet,void*pData)
{

 

#define NewType1 unsigned short int

#define NewType2 double

 

...

NewType2  x2sum=0,y2sum=0;

x2sum+=xBuffer[i*nw+j]*(NewType1)xBuffer[i*nw+j];

y2sum+=yBuffer[i*nw+j]*(NewType1yBuffer[i*nw+j];

...
}

我分为三组进行测试,

组一:NewType2为double ,NewType1为double

组二:NewType2为double,NewType1为unsigned short int

组三:NewType2为boost::uint64_t,NewType1为unsigned short int

用GetTickCount()函数进行5-6次测试,时间单位为毫秒,结果如下:


组一
17378 19453 16895 16411 16832
组二
17332 17893 19484 19516 17114 17802 16786

组三

15803 15117 15569 15133 14914 15241

 

从结果可以发现整数结果优于浮点结果,但不是非常明显。

原因是,在很多芯片上浮点数运算要占用接近20的时钟周期, 在有些芯片上比你估计的20倍差距还要大。 浮点数运算非常低效又非常重要,所以从386时代浮点协处理器就很普及了,后来直接把这个协处理器做在cpu里面, 现在的这些cpu都是带浮点处理器的, 一次浮点运算只需要2,3个时钟周期,这已经跟整数乘法差不多了(有些阉割版本处理器这方面会差一些。(本段引用于http://zhidao.baidu.com/question/93265724.html

 

但是不知道boost::uint64_t会不会影响效率,因为我电脑是32位的,下次有时间用GDT_Byte类型图像做一次测试,再试试看。

 

 

 

卷积运算的应用

阅读数 3832

MATLAB图像处理命令

阅读数 639

matlab调用opencv库

阅读数 18841

没有更多推荐了,返回首页