sum函数 图像处理_数据库sum函数空如何处理 - CSDN
精华内容
参与话题
  • 题目:自定义一个函数,将输入图像(EXP3A.tif)进行直方图均衡化处理,该函数输入参数为处理前的图像,输出参数为处理后的图像和直方图均衡化过程的变换函数,并画出直方图均衡化处理过程中的变换函数。 提示:直方...

    题目:自定义一个函数,将输入图像(EXP3A.tif)进行直方图均衡化处理,该函数输入参数为处理前的图像,输出参数为处理后的图像和直方图均衡化过程的变换函数,并画出直方图均衡化处理过程中的变换函数。

    提示:直方图均衡化是一种无参的图像灰度变换方法,所以可将函数模板设计为[img2, func_T] = myHistogramEqualization(img);其中,img为唯一的输入参数输入图像;img2为输出图像,func_T为将img处理成img2所用的变换函数,变换函数可利用灰度变换模型计算累计概率密度(CDF)获得。

     

    流程:

    1. 统计图像中每个灰度级出现的次数,再统计图像中每个灰度级出现的概率

    2. 根据变换公式得到直方图均衡化的变换函数

    3. 根据变换函数映射到每个像素点

    4. 输出映射后的图像

    实现效果演示:

                                          图1 直方图均衡化处理前后的图像及其对应的变换函数

    实现源代码:

    function [img2, func_T] = myHistogramEqualization(img)
        img1 = double(img);
        [r,c,l] = size(img1)%获取图像的高r和宽c
        %统计图像中每个灰度级出现的次数
        count = zeros(1,256);
        for i=1:r
            for j=1:c
                count(1,img(i,j)+1) = count(1,img(i,j)+1)+1;
            end
        end
        %统计图像中每个灰度级出现的概率
        p = zeros(1,256);
        for i=1:256
            p(1,i) = count(1,i)/(r*c);
        end
        img2 = im2uint8(ones(r,c));%创建一个r X c大小的1矩阵
        
        func_T = zeros(1,256);%变换函数
        p_sum = 0;
        %求直方图均衡化的变换函数
        for k = 1:256
            p_sum = p_sum + p(k);%求每个灰度级的概率之和
            func_T(k) = (256-1)*p_sum;%根据变换函数的公式求和
        end
        
        func_T_z =  round(func_T);%对变换函数进行取整
        %完成每个像素点的映射
        for i = 1:256
            findi = find(func_T_z==i);%找到灰度级为i的概率和
            len = length(findi);
            for j=1:len
                findj = find(img==(findi(j)-1));%进行对应每个像素点的映射
                img2(findj) = i;
            end
        end
    end
    
    clc;
    clear;
    close all;
    
    img1 = imread('EXP3A.tif');
    
    [img2, func_T] = myHistogramEqualization(img1);
    
    
    %显示图像
    figure('NumberTitle', 'off', 'Name', '实验一第一题'); 
    
    subplot(2,3,1);
    imshow(img1);
    title('原始图像');
    
    subplot(2,3,3);
    imshow(img2);
    title('均衡化后图像');
    
    subplot(2,3,4);
    imhist(img1);
    xlim([0 255]);
    title('原始图像的直方图');
    
    subplot(2,3,5);
    plot(1:256,func_T);
    xlim([0 255]);
    ylim([0, 255]);
    title('变换函数');
    
    subplot(2,3,6);
    imhist(img2);
    xlim([0 255]);
    title('均衡化后图像的直方图');
    

     

    展开全文
  • Matlab sum( ) 函数

    千次阅读 2014-08-08 17:18:26
    Matlab 图像处理 Day



    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 :

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

                                                                    










               


       

    
    
    展开全文
  • 基于Otsu算法的图像自适应阈值分割

    万次阅读 多人点赞 2020-04-17 03:09:02
    图像处理实践中,将灰度图转化为二值图是非常常见的一种预处理手段。在Matlab中,可以使用函数BW = im2bw(I, level)来将一幅灰度图 I,转化为二值图。其中,参数level是一个介于0~1之间的值,也就是用于分割图像的...

    在图像处理实践中,将灰度图转化为二值图是非常常见的一种预处理手段。在Matlab中,可以使用函数BW = im2bw(I, level)来将一幅灰度图 I,转化为二值图。其中,参数level是一个介于0~1之间的值,也就是用于分割图像的阈值。默认情况下,它可取值是0.5。

     

    现在问题来了,有没有一种根据图像自身特点来自适应地选择阈值的方法呢?答案是肯定的!我们今天就来介绍其中最为经典的Otsu算法(或称大津算法)。该算法由日本科学家大津展之(Nobuyuki Otsu)于1979年提出。这个算法看似简单,却与统计分析中的“方差分析”方法有很深的渊源。有兴趣的读者也可以参考算法原文《A threshold selection method from gray-level histograms》(在线浏览地址:http://wenku.baidu.com/view/996e972d7375a417866f8f5d)我们今天在介绍该算法原理的基础之上,通过简单的Matlab代码来演示它的实现。

     

    Matlab的帮助信息中指出:To compute the level argument,you can use the function graythresh. The graythresh function uses Otsu's method。可见,函数graythresh()就是Matlab中的大津法实现。如果对Otsu算法的原理并不感兴趣,完全可以直接调用graythresh()函数,而无需过多关系其中的技术细节。

     

    在大津法中,我们定义组内方差为

    通过选择使得上述组内方差最小化时的阈值 t,就可以使得图像中的前景和背景尽可能的被区别开(假设我们将最终图像里被分开的两部分称为前景和背景)。w0和w1分别是一个像素可能属于前景或背景的概率,而 σ 表示两个类别的方差。如果一个图像的直方图有L个等级(一般L=256),那么在给定阈值 t的情况下,w0和w1分别定义为

    大津展之证明最小化组内方差(intra-class variance)与最大化组间方差(inter-class variance)是等价的,于是有

    又因为(其中 μ 表示均值或期望)

    可以推出

    这个证明仅仅涉及一些算术上的推导,我简单演示如下

    最后我们给出在Matlab中实现的代码,这个代码的最初版本来自维基百科,为了与前面的公式中的标记相一致,我略有修改。

    function level = otsu(histogramCounts, total)
    sum0 = 0;
    w0 = 0;
    maximum = 0.0;
    total_value = sum((0:255).*histogramCounts');
    for ii=1:256
        w0 = w0 + histogramCounts(ii);
        if (w0 == 0)
            continue;
        end
        w1 = total - w0;
        if (w1 == 0)
            break;
        end
        sum0 = sum0 +  (ii-1) * histogramCounts(ii);
        m0 = sum0 / w0;
        m1 = (total_value - sum0) / w1;
        icv = w0 * w1 * (m0 - m1) * (m0 - m1);
        if ( icv >= maximum )
            level = ii;
            maximum = icv;
        end
    end
    
    end

    上述函数中的参数histogramCounts是图像的直方图, total图像的总像素数。来看下面这段调用上述函数的测试代码。

    >> img = imread('otsus_test.jpg');
    >> [counts x] = imhist(img);
    >> [m n] = size(img);
    >> level = otsu(counts, m*n);
    >> output = img;
    >> output(output<level) = 0;
    >> output(output>=level) = 255;
    >> imshow(output)


    首先给出原始图像

    然后是基于Otsu算法获取的二值图

     

    更多有趣有用的图像处理算法还可以参考我的《数字图像处理原理与实践(Matlab版)》

    展开全文
  • C语言实现的滑动平均滤波算法

    万次阅读 2017-09-27 15:52:58
     因为在matlab中依靠matlab的画图函数很容易看到滤波后的数据图像,进而验证滤波效果。最后选择滤波效果好的滤波方法进行C语言实现。  所以首先将采集到的原始数据保存到TXT文档里面,然后导入到matlab中,在...

        最近采集压力传感器的电压信号,采集到的数据波动挺大的,所以采用滤波的方法进行处理一下。

        因为在matlab中依靠matlab的画图函数很容易看到滤波后的数据图像,进而验证滤波效果。

        所以首先将采集到的原始数据保存到TXT文档里面,然后导入到matlab中,在matlab中对数据进行滤波。

        在matlab中采用了三种滤波方法:1、滑动平均滤波 2、中值滤波 3、卡尔曼滤波

        在对比了三种滤波之后的图像之后,选择了第一种滑动平均滤波的方法。在matlab中有专门的函数:smooth(变量),但是我们要用C语言实现这个功能。

        我依据滑动平均滤波的原理进行了程序编写,对于数据开始部分和结尾部分做了一些改变,得到的滤波效果还不错,与matlab的滤波效果差异很小。

        话不多说,上代码:

    #define size 6000//数组大小
    #define N 12//滑动平均滤波计算平均值时所取的点数
    /*上面两句在使用下面这个函数的时候加到程序的开头*/
    void Smooth(float data[])
    {
        Sum1=0;
        for(int j=0;j<size;j++)
        {
            if(j<N/2)
            {
                for(int k=0;k<N;k++)
                {
                    Sum1+=data[j+k];
                }
                data[j]=Sum1/N;
            }
            else
                if(j<size -N/2)
                {
                    for(int k=0;k<N/2;k++)
                    {
                        Sum1+=(data[j+k]+data[j-k]);
                    }
                    data[j]=Sum1/N;
                }
                else
                {
                    for(int k=0;k<size-j;k++)
                    {
                        Sum1+=data[j+k];
                    }
                    for(int k=0;k<(N-size+j);k++)
                    {
                        Sum1+=data[j-k];
                    }
                    data[j]=Sum1/N;
                }
            Sum1=0;
        }
    }

     

        这是我根据我写的滑动平均算法做了点改动,下面看看滤波效果图



     蓝色的线是原始数据图像,红色的线是滤波之后的数据图像


        这张图中红色的是原始数据图像,绿色的线是matlab自带的smooth函数滤波之后的图像,蓝色的线是我自己用C语言写的滤波算法滤波之后的数据图像,都是滤波20次。

        可以看出这个移动平均滤波算法能够达到要求,并且可以和matlab中的smooth函数相比。

        就讲到这里吧,如果有问题可以在评论区留言,希望能够对大家有用,谢谢大家观看。

    展开全文
  • Matlab 图像处理之距离函数

    万次阅读 2018-01-23 06:01:47
    距离变换提供像素与某个图像的子集(可能是表示物体或某些特征)的距离。所产生的图像在该子集元素位置处的像素值为0,邻近的像素具有较小的值,离他越远的数值就越大。换句话说,一幅二值图像的距离变换提供每个...
  • 功能:对图像进行分块处理 函数调用形式: B = blkproc(A,[m n],fun, parameter1, parameter2, ...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 参数解释:  [m n] : ...
  • 前端使用echarts3实现tooltip的formatter函数的自定义,实现显示一组图像,tooltip里面显示多组数据
  • MATLAB中求图像中某一区域的质心

    万次阅读 2014-08-05 22:03:42
    MATLAB中求图像中某一区域的质心  clear;clc;close all %%读入图像 I_gray=imread('130.bmp'); level=graythresh(I_gray); %%求二值化的阈值 [height,width]=size(I_gray); bw=im2bw(I_gray,...
  • matlab实现彩色图像灰度化的三种方法

    万次阅读 多人点赞 2018-12-14 20:50:13
    将彩色图像转换为灰度图像的过程称为灰度化处理。 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程。 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的一个,R=G=B=max(R,G,B...
  • 图像相似度检测算法

    千次阅读 2016-08-16 11:21:59
    1 直方图1.1 直方图概念对颜色特征的表达方式有许多种,我们采用直方图进行特征描述。...图像特征的统计直方图实际是一个1-D的离散函数,即: h(rk)=nk. 其中k=0,1,…L-1 归一化直方图 P(rk)=nk/N. 上
  • matlab-----均值滤波函数的实现

    万次阅读 2014-07-04 10:35:03
    在进行matlab图像处理时,往往会用到不同滤波函数对图像进行去噪和
  • 在进行纹理分析时计算纹理zhouqi
  • ispforfun会在从今天开始定期给大家带来维纳滤波器在图像处理中应用。本节讲诉维纳滤波器在图像去噪中的简单应用。  让我们从Matlab中的函数wiener2开始。Matlab的help中对wiener2的说明如下:  wiener2估计图像...
  • 数字图像处理——添加高斯噪声&椒盐噪声

    万次阅读 多人点赞 2017-07-31 12:35:04
    1.添加高斯噪声1.1 概率密度函数σ为z的标准差,z为均值,用E。1.2 生成高斯分布随机数序列方法由Marsaglia和Bray在1964年提出,C++版本如下: mu是均值,sigma是方差,X服从N(0,1)分布 double generateGaussianNoise...
  • 直方图均衡化算法原理与实现

    万次阅读 2018-09-01 08:09:48
    工作后,对原来学习的一些基本图像处理算法有了一些新的认识,比如Canny 算法,直方图均衡化算法等,今天就来说说直方图均衡化算法。 直方图均衡化原理 我们知道提高图像对比度的变换函数f(x)需要满足一下条件: ...
  • 一、腐蚀和膨胀  形态学是一门新兴科学,它的用途主要是获取物体拓扑和结果信息...它在图像处理中的应用主要是:  1.利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;  2.描述
  • 那么这个函数求的熵就是 -sum(p(i).*log2[p(i)]),通俗来讲就是对每个p求其对应的p(i).*log2[p(i)],然后再把这些所有结果加起来再取相反数。 ==============下面是一分钟之外的额外内容=======...
  • 如果要在一幅图像中寻找已知物体,最常用且最简单的方法之一就是匹配。 在目标识别的方法中,匹配属于基于决策理论方法的识别。匹配方法可以是最小距离分类器,相关匹配。本文code是基于最小距离分类器,基于相关...
  • matlab 去除高斯噪声

    万次阅读 2016-11-22 19:09:58
    1.读入一幅图像,利用’imnoise’函数,添加高斯噪声;>> clear all; >> sample = imread('sample.jpg'); >> gaussianSample=imnoise(sample,'gaussian'); >>imshow(gaussianSample);2.通过100次相加求平均的方法...
  • 基于MATLAB的数字图像处理———灰度变换与空间滤波 对于图像平面,定义为二维函数 f (x,y),其中x,y分别为空间横竖坐标。当f,x,y都是有限离散值时,图像即为数字图像。 一、图像的输入/输出和显示 相关函数: ...
1 2 3 4 5 ... 20
收藏数 32,841
精华内容 13,136
关键字:

sum函数 图像处理