图像处理算法matlab_matlab图像处理算法 - CSDN
精华内容
参与话题
  • 图像处理matlab

    万次阅读 2018-09-11 22:35:04
    1.基本函数: iread('文件路径'); idisp(); 2.一元操作: imd=idouble(im);... //将彩色图像转变成灰度图像。 ihist();//显示每一个像素值出现的次数 im=igamma(im,1/0.45); //伽马编码,一种非线性一...

    1.基本函数:

    iread('文件路径');

    idisp();

    2.一元操作:o[u,v]=f(I[u,v])

    imd=idouble(im);  //将像素从unit8(范围在0-255的整数像素)到范围在[0,1]的双精度值

    grey=imono(im);    //将彩色图像转变成灰度图像。

    ihist();//显示每一个像素值出现的次数

    im=igamma(im,1/0.45); //伽马编码,一种非线性一元操作

    3.二元操作:o[u,v]=f(I_{1}[u,v],I_{2}[u,v])

    isamesize(image1,image2);  //将2缩放并裁剪到跟1相同的大小

    ........

    4.空间操作o[u,v]=f(I[u+i,v+j])

     

    4.1互相关 o[u,v]=\sum _{(i,j)\epsilon w }I[u+i,v+j]K[i,j], K是互相关核,对于每一个输出像素,对应输入图像中的像素窗口w要逐个元素地与互相关核K相乘。

    在工具箱中,互相关使用函数iconv表示。iconv(image,K);

     

    4.1.1平滑处理(光滑化、模糊化或者散焦)

    K=ones(21,21)/21^2; //每一个输出像素都是输入图像中与之相对应的21x21相领像素的平均值  ->平均值滤波

    G(u,v)=\frac{1}{2\pi\sigma ^{2} }e^{-\frac{u^{2}+v^{2}}{2\sigma ^{2}}}  二维高斯函数(关于原点对称,曲线下方体积为1)的扩展由标准差参数\sigma控制。 ->高斯滤波

    K=kguass(5); //指定标准差为5像素

     

    4.1.2边界检测:
     lena=iread('C:\Users\Administrator\Desktop\matlab实验照片\2.jpeg','double','grey');

     p=lena(60,:);  //在v=60处图像中的一条水平线

    沿着这个横截面的一阶倒数是p^{^{'}}[v]=p[v]-p[v-1],一阶倒数可以用diff函数计算。->亮度变化的倒数

    在v点处的导数也可以写成对称的一阶差分:p^{^{'}}[v]=\frac{1}{2}(p[v+1]-p[v-1])

    它等同于和下面的一维互相关核求互相关运算:

                                                                     K=(-\frac{1}{2} 0 \frac{1}{2})

    将图像与这个核求互相关:

    K=[-0.5 0 0.5];

    idsip(iconv(lena,K),'invsigned')    ->图片具有高水平梯度的竖直边缘清晰可见。效果如下所示(上面为原图):

      

    利用索伯互相关核计算水平梯度,利用三行水平梯度的加权值。

    Du=ksobel,上图为原图,下面为处理之后的

    坎尼算子:

    算法大致流程:

    1、求图像与高斯平滑滤波器卷积:

    2、使用一阶有限差分计算偏导数的两个阵列P与Q:

    3、幅值和方位角:

    4、非极大值抑制(NMS ) :细化幅值图像中的屋脊带,即只保留幅值局部变化最大的点。

    将梯度角的变化范围减小到圆周的四个扇区之一,方向角和幅值分别为:

    非极大值抑制通过抑制梯度线上所有非屋脊峰值的幅值来细化M[i,j],中的梯度幅值屋脊.这一算法首先将梯度角θ[i,j]的变化范围减小到圆周的四个扇区之一

    edges=icanny(lena,2);效果如下所示:

    4.2模板匹配O[u,v]=s(T,W)

    函数s(T,W)是一个标量测度,用来描述两幅相同大小的图像T和W之间的相似性。

    常用方法有:绝对差值(SAD),差值平方和(SSD)以及互相关(NCC)

     

    展开全文
  • matlab图像处理常用算法源码

    千次阅读 2018-07-04 09:14:49
    1.图像反转MATLAB程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB程序实现如下:I=imread('...

    1.图像反转
    MATLAB程序实现如下:
    I=imread('xian.bmp');
    J=double(I);
    J=-J+(256-1);                 %图像反转线性变换
    H=uint8(J);
    subplot(1,2,1),imshow(I);
    subplot(1,2,2),imshow(H);

    2.灰度线性变换
    MATLAB程序实现如下:
    I=imread('xian.bmp');
    subplot(2,2,1),imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系
    I1=rgb2gray(I);
    subplot(2,2,2),imshow(I1);
    title('灰度图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系
    J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1]
    subplot(2,2,3),imshow(J);
    title('线性变换图像[0.1 0.5]');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1]
    subplot(2,2,4),imshow(K);
    title('线性变换图像[0.3 0.7]');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    3.非线性变换
    MATLAB程序实现如下:
    I=imread('xian.bmp');
    I1=rgb2gray(I);
    subplot(1,2,1),imshow(I1);
    title('灰度图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    J=double(I1);
    J=40*(log(J+1));
    H=uint8(J);
    subplot(1,2,2),imshow(H);
    title('对数变换图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    4.直方图均衡化
    MATLAB程序实现如下:
    I=imread('xian.bmp');
    I=rgb2gray(I);
    figure;
    subplot(2,2,1);
    imshow(I);
    subplot(2,2,2);
    imhist(I);
    I1=histeq(I);
    figure;
    subplot(2,2,1);
    imshow(I1);
    subplot(2,2,2);
    imhist(I1);

    5.线性平滑滤波器
    用MATLAB实现领域平均法抑制噪声程序:
    I=imread('xian.bmp');
    subplot(231)
    imshow(I)
    title('原始图像')
    I=rgb2gray(I);
    I1=imnoise(I,'salt & pepper',0.02);
    subplot(232)
    imshow(I1)
    title('添加椒盐噪声的图像')
    k1=filter2(fspecial('average',3),I1)/255;          %进行3*3模板平滑滤波
    k2=filter2(fspecial('average',5),I1)/255;          %进行5*5模板平滑滤波k3=filter2(fspecial('average',7),I1)/255;          %进行7*7模板平滑滤波
    k4=filter2(fspecial('average',9),I1)/255;          %进行9*9模板平滑滤波
    subplot(233),imshow(k1);title('3*3模板平滑滤波');
    subplot(234),imshow(k2);title('5*5模板平滑滤波');
    subplot(235),imshow(k3);title('7*7模板平滑滤波');
    subplot(236),imshow(k4);title('9*9模板平滑滤波');

    6.中值滤波器
    用MATLAB实现中值滤波程序如下:
    I=imread('xian.bmp');
    I=rgb2gray(I);
    J=imnoise(I,'salt&pepper',0.02);
    subplot(231),imshow(I);title('原图像');
    subplot(232),imshow(J);title('添加椒盐噪声图像');
    k1=medfilt2(J);            %进行3*3模板中值滤波
    k2=medfilt2(J,[5,5]);      %进行5*5模板中值滤波
    k3=medfilt2(J,[7,7]);      %进行7*7模板中值滤波
    k4=medfilt2(J,[9,9]);      %进行9*9模板中值滤波
    subplot(233),imshow(k1);title('3*3模板中值滤波');
    subplot(234),imshow(k2);title('5*5模板中值滤波');
    subplot(235),imshow(k3);title('7*7模板中值滤波');
    subplot(236),imshow(k4);title('9*9模板中值滤波');

    7.用Sobel算子和拉普拉斯对图像锐化:
    I=imread('xian.bmp');
    subplot(2,2,1),imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I1=im2bw(I);
    subplot(2,2,2),imshow(I1);
    title('二值图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    H=fspecial('sobel');     %选择sobel算子 
    J=filter2(H,I1);            %卷积运算
    subplot(2,2,3),imshow(J); 
    title('sobel算子锐化图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    h=[0 1 0,1 -4 1,0 1 0];   %拉普拉斯算子
    J1=conv2(I1,h,'same');            %卷积运算
    subplot(2,2,4),imshow(J1); 
    title('拉普拉斯算子锐化图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    8.梯度算子检测边缘
    用MATLAB实现如下:
    I=imread('xian.bmp');
    subplot(2,3,1);
    imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I1=im2bw(I);
    subplot(2,3,2);
    imshow(I1);
    title('二值图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I2=edge(I1,'roberts');
    figure;
    subplot(2,3,3);
    imshow(I2);
    title('roberts算子分割结果');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I3=edge(I1,'sobel');
    subplot(2,3,4);
    imshow(I3);
    title('sobel算子分割结果');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I4=edge(I1,'Prewitt');
    subplot(2,3,5);
    imshow(I4);
    title('Prewitt算子分割结果');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    9.LOG算子检测边缘
    用MATLAB程序实现如下:
    I=imread('xian.bmp');
    subplot(2,2,1);
    imshow(I);
    title('原始图像');
    I1=rgb2gray(I);
    subplot(2,2,2);
    imshow(I1);
    title('灰度图像');
    I2=edge(I1,'log');
    subplot(2,2,3);
    imshow(I2);
    title('log算子分割结果');

    10.Canny算子检测边缘
    用MATLAB程序实现如下:
    I=imread('xian.bmp');
    subplot(2,2,1);
    imshow(I);
    title('原始图像')
    I1=rgb2gray(I);
    subplot(2,2,2);
    imshow(I1);
    title('灰度图像');
    I2=edge(I1,'canny');
    subplot(2,2,3);
    imshow(I2);
    title('canny算子分割结果');

    11.边界跟踪(bwtraceboundary函数)
    clc
    clear all
    I=imread('xian.bmp');
    figure
    imshow(I);
    title('原始图像');
    I1=rgb2gray(I);                %将彩色图像转化灰度图像 
    threshold=graythresh(I1);        %计算将灰度图像转化为二值图像所需的门限
    BW=im2bw(I1, threshold);       %将灰度图像转化为二值图像
    figure
    imshow(BW);
    title('二值图像');
    dim=size(BW);
    col=round(dim(2)/2)-90;         %计算起始点列坐标
    row=find(BW(:,col),1);          %计算起始点行坐标
    connectivity=8;
    num_points=180;
    contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points); 
    %提取边界
    figure
    imshow(I1);
    hold on;
    plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);
    title('边界跟踪图像');

    12.Hough变换
    I= imread('xian.bmp');
    rotI=rgb2gray(I);
    subplot(2,2,1);
    imshow(rotI);
    title('灰度图像');
    axis([50,250,50,200]);
    grid on;                 
    axis on; 
    BW=edge(rotI,'prewitt');
    subplot(2,2,2);
    imshow(BW);
    title('prewitt算子边缘检测后图像');
    axis([50,250,50,200]);
    grid on;                 
    axis on; 
    [H,T,R]=hough(BW);
    subplot(2,2,3);
    imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');
    title('霍夫变换图');
    xlabel('\theta'),ylabel('\rho');
    axis on , axis normal, hold on;
    P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
    x=T(P(:,2));y=R(P(:,1));
    plot(x,y,'s','color','white');
    lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
    subplot(2,2,4);,imshow(rotI);
    title('霍夫变换图像检测');
    axis([50,250,50,200]);
    grid on;                 
    axis on; 
    hold on;
    max_len=0;
    for k=1:length(lines)
    xy=[lines(k).point1;lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
    plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
    plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
    len=norm(lines(k).point1-lines(k).point2);
    if(len>max_len)
    max_len=len;
    xy_long=xy;
    end
    end
    plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

    13.直方图阈值法
    用MATLAB实现直方图阈值法:
    I=imread('xian.bmp');
    I1=rgb2gray(I);
    figure;
    subplot(2,2,1);
    imshow(I1);
    title('灰度图像')
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    [m,n]=size(I1);                            %测量图像尺寸参数
    GP=zeros(1,256);                           %预创建存放灰度出现概率的向量
    for k=0:255
         GP(k+1)=length(find(I1==k))/(m*n);    %计算每级灰度出现的概率,将其存入GP中相应位置
    end
    subplot(2,2,2),bar(0:255,GP,'g')                   %绘制直方图
    title('灰度直方图')
    xlabel('灰度值')
    ylabel('出现概率') 
    I2=im2bw(I,150/255);   
    subplot(2,2,3),imshow(I2);
    title('阈值150的分割图像')
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I3=im2bw(I,200/255);   %
    subplot(2,2,4),imshow(I3);
    title('阈值200的分割图像')
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    14. 自动阈值法:Otsu法
    用MATLAB实现Otsu算法:
    clc
    clear all
    I=imread('xian.bmp');
    subplot(1,2,1),imshow(I);
    title('原始图像')
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    level=graythresh(I);     %确定灰度阈值
    BW=im2bw(I,level);
    subplot(1,2,2),imshow(BW);
    title('Otsu法阈值分割图像')
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    15.膨胀操作
    I=imread('xian.bmp');          %载入图像
    I1=rgb2gray(I);
    subplot(1,2,1);
    imshow(I1);
    title('灰度图像')      
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    se=strel('disk',1);          %生成圆形结构元素
    I2=imdilate(I1,se);             %用生成的结构元素对图像进行膨胀
    subplot(1,2,2);
    imshow(I2);
    title('膨胀后图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    16.腐蚀操作
    MATLAB实现腐蚀操作
    I=imread('xian.bmp');          %载入图像
    I1=rgb2gray(I);
    subplot(1,2,1);
    imshow(I1);
    title('灰度图像')      
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    se=strel('disk',1);       %生成圆形结构元素
    I2=imerode(I1,se);        %用生成的结构元素对图像进行腐蚀
    subplot(1,2,2);
    imshow(I2);
    title('腐蚀后图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系

    17.开启和闭合操作
    用MATLAB实现开启和闭合操作
    I=imread('xian.bmp');          %载入图像
    subplot(2,2,1),imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系 
    I1=rgb2gray(I);
    subplot(2,2,2),imshow(I1);
    title('灰度图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系                   
    se=strel('disk',1);     %采用半径为1的圆作为结构元素
    I2=imopen(I1,se);         %开启操作
    I3=imclose(I1,se);        %闭合操作
    subplot(2,2,3),imshow(I2);
    title('开启运算后图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系
    subplot(2,2,4),imshow(I3);
    title('闭合运算后图像');
    axis([50,250,50,200]); 
    axis on;                  %显示坐标系

    18.开启和闭合组合操作
    I=imread('xian.bmp');          %载入图像
    subplot(3,2,1),imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系 
    I1=rgb2gray(I);
    subplot(3,2,2),imshow(I1);
    title('灰度图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系                   
    se=strel('disk',1);     
    I2=imopen(I1,se);         %开启操作
    I3=imclose(I1,se);        %闭合操作
    subplot(3,2,3),imshow(I2);
    title('开启运算后图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系
    subplot(3,2,4),imshow(I3);
    title('闭合运算后图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系
    se=strel('disk',1); 
    I4=imopen(I1,se);
    I5=imclose(I4,se);
    subplot(3,2,5),imshow(I5);        %开—闭运算图像
    title('开—闭运算图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系 
    I6=imclose(I1,se);
    I7=imopen(I6,se);
    subplot(3,2,6),imshow(I7);        %闭—开运算图像 
    title('闭—开运算图像');
    axis([50,250,50,200]);
    axis on;                  %显示坐标系  

    19.形态学边界提取
    利用MATLAB实现如下:
    I=imread('xian.bmp');          %载入图像
    subplot(1,3,1),imshow(I);
    title('原始图像'); 
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I1=im2bw(I);
    subplot(1,3,2),imshow(I1);
    title('二值化图像');
    axis([50,250,50,200]);
    grid on;                  %显示网格线
    axis on;                  %显示坐标系
    I2=bwperim(I1);                 %获取区域的周长
    subplot(1,3,3),imshow(I2); 
    title('边界周长的二值图像');
    axis([50,250,50,200]);
    grid on;
    axis on;             

    20.形态学骨架提取
    利用MATLAB实现如下:
    I=imread('xian.bmp');
    subplot(2,2,1),imshow(I);
    title('原始图像');
    axis([50,250,50,200]);
    axis on;                  
    I1=im2bw(I);
    subplot(2,2,2),imshow(I1);
    title('二值图像');
    axis([50,250,50,200]);
    axis on;                 
    I2=bwmorph(I1,'skel',1);
    subplot(2,2,3),imshow(I2);
    title('1次骨架提取');
    axis([50,250,50,200]);
    axis on;                  
    I3=bwmorph(I1,'skel',2);
    subplot(2,2,4),imshow(I3);
    title('2次骨架提取');
    axis([50,250,50,200]);
    axis on;              

    21.直接提取四个顶点坐标
    I = imread('xian.bmp');
    I = I(:,:,1);
    BW=im2bw(I); 
    figure
    imshow(~BW)

    [x,y]=getpts


    转自:https://blog.csdn.net/u012116229/article/details/44775277

    展开全文
  • matlab图像处理算法

    2020-07-29 14:19:20
    程序代码说明 P0701:细胞边缘检测 P0702:癌细胞形态学分析 P0703:癌细胞颜色分析
  • 边缘提取算子 一阶:Roberts算子、Sobel算子、Prewitt算子、Kirsch算子、Robinson算子 二阶: Laplacian算子、Canny算子、Marr-Hildreth(LoG算子) Roberts 算子 在(i+1/2,j+1/2)处差分 ...

    边缘提取算子

    一阶:  Roberts算子、Sobel算子、Prewitt算子、Kirsch算子、Robinson算子

    二阶: Laplacian算子、Canny算子、Marr-Hildreth(LoG算子)

     

    Roberts 算子

    在(i+1/2,j+1/2)处差分

    转化为模板即为

    Roberts算子,又称罗伯茨算子,是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子。他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。

    Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。

     

    Sobel算子

    Sobel算法是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。

     

    Prewitt算子

    Prewitt算子是一种一阶微分算子边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。

    其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

    Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。

    对数字图像f(x,y),Prewitt算子的定义如下:

    G(i)={[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]}

    G(j)={[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]}

    则P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)

     

    Kirsch算子

    Kirsch算子是R.Kirsch提出来一种边缘检测算法,它采用8个3*3的模板对图像进行卷积,这8个模板代表8个方向,并取最大值作为图像的边缘输出,8个模板如下,它在保持细节和抗噪声方面都有较好的效果。

     

     

    Robinson算子

    规则同上,也是8个模板。

     

    Laplacian算子

    Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

    Laplacian 算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度grad的散度div。可使用运算模板来运算这定理定律。

    函数的拉普拉斯算子也是该数的黑塞矩阵的迹,可以证明,它具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。

    Laplacian 算子对噪声比较敏感,所以图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian 算子和平滑算子结合起来生成一个新的模板。

    如果邻域系统是4 邻域,Laplacian 算子的模板为:

    如果邻域系统是8 邻域,Laplacian 算子的模板为:

     

    Canny算子

    Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。

    优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

    该算子效果较好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。

    Canny边缘检测算法

    step1: 用高斯滤波器平滑图象;

    step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;

    step3: 对梯度幅值进行非极大值抑制

    step4: 用双阈值算法检测和连接边缘

    参考:

    https://blog.csdn.net/fengye2two/article/details/79190759

    https://blog.csdn.net/jiachen0212/article/details/80078685

    https://www.cnblogs.com/zhuifeng-mayi/p/9563947.html

    https://www.cnblogs.com/techyan1990/p/7291771.html

     

    Marr-HildrethLoG算子

    LoG可以看成是一个高斯模板的拉普拉斯变换   Laplace of Gaussian

    (图像的高斯拉普拉斯(LoG),可利用差分高斯(DoG)近似)

    参考:

    好:LOG高斯-拉普拉斯算子 https://blog.csdn.net/touch_dream/article/details/62237018 

    DoG算子和LoG算子 https://blog.csdn.net/dreamguard/article/details/83988814

    好:LoG算子 https://blog.csdn.net/songzitea/article/details/12851079

    LOG边缘检测--Marr-Hildreth边缘检测算法 https://blog.csdn.net/bettyshasha/article/details/51757185  

    好:SIFT特征点检测,特征点描述,特征点匹配理解 https://blog.csdn.net/ds0529/article/details/79617619

    matlab代码

     

    matlab自带edge函数

    matlab中edge函数提供了很多算子,函数原型和算子包括:

    matlab自带edge函数 使用代码:

    clear;clc;
    
    %读取图像
    I=imread('Lena512.png');
    %I=rgb2gray(I);
    figure;imshow(I,[]);title('Original Image');
    
    %sobel----------------------
    sobelBW = edge(I,'sobel',0.06);  %可以省去0.06,系统会默认。
    figure;imshow(sobelBW,[]);title('Sobel 0.06')
    
    %roberts----------------------
    robertsBW=edge(I,'roberts');
    figure;imshow(robertsBW);title('Roberts Edge');
    
    %prewitt----------------------
    prewittBW=edge(I,'prewitt');
    figure;imshow(prewittBW);title('Prewitt Edge');
    
    %Laplacian----------------------
    logBW=edge(I,'log');
    figure;imshow(logBW);title('Laplasian of Gaussian Edge');
    
    %canny----------------------
    cannyBW=edge(I,'canny');
    figure;imshow(cannyBW);title('Canny Edge');
    
    %高斯滤波 再 canny ----------------------
    h=fspecial('gaussian',5);%高斯滤波
    I2=imfilter(I,h,'replicate');
    GcannyBW=edge(I2,'canny');%高斯滤波后使用Canny算子进行边缘检测
    figure;imshow(GcannyBW);title('Gaussian & Canny Edge');

     

    非matlasb自带 :梯度法、roberts算子、prewitt算子、sobel算子、krisch算子、LoG算子

    %% 非matlasb自带 :梯度法、roberts算子、prewitt算子、sobel算子、krisch算子、LoG算子
    clear;clc;close all
    f=imread('Lena512.png');
    T=20;%阈值
    [m,n]=size(f);
    %------梯度法-------
    f_g=zeros(m,n);
    for i=2:m-1
        for j=2:n-1
            f_g(i,j)=abs(f(i+1,j)-f(i,j))+abs(f(i,j+1)-f(i,j));
            if f_g(i,j)<T
                f_g(i,j)=0;
            else
                f_g(i,j)=255;
            end
        end
    end
    figure(1);
    subplot(2,3,1);imshow(uint8(f_g));title('梯度法');
    %------roberts算子-------
    f_r=zeros(m,n);
    for i=2:m-1
        for j=2:n-1
            f_r(i,j)=abs(f(i+1,j+1)-f(i,j))+abs(f(i,j+1)-f(i+1,j));
            if f_r(i,j)<T
                f_r(i,j)=0;
            else
                f_r(i,j)=255;
            end
        end
    end
    %f_r=imbinarize(imfilter(f,r),T);
    subplot(2,3,2);imshow(uint8(f_r));title('Roberts算子');
     
    %------prewitt算子-------
    f_p=zeros(m,n);
    for i=2:m-1
        for j=2:n-1
            f_p(i,j)=abs(f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)-f(i-1,j+1)-f(i,j+1)-f(i+1,j+1))+abs(f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)-f(i-1,j-1)-f(i-1,j)-f(i-1,j+1));
            if f_p(i,j)<15
                f_p(i,j)=0;
            else
                f_p(i,j)=255;
            end
        end
    end
    subplot(2,3,3);imshow(uint8(f_p));title('Prewitt算子');
     
    %------sobel算子-------
    f_s=zeros(m,n);
    for i=2:m-1
        for j=2:n-1
            f_s(i,j)=abs(f(i-1,j-1)+2*f(i,j-1)+f(i+1,j-1)-f(i-1,j+1)-2*f(i,j+1)-f(i+1,j+1))+abs(f(i+1,j-1)+2*f(i+1,j)+f(i+1,j+1)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1));
            if f_s(i,j)<T
                f_s(i,j)=0;
            else
                f_s(i,j)=255;
            end
        end
    end
    subplot(2,3,4);imshow(uint8(f_s));title('Sobel算子');
     
    %------krisch算子-------
    k(:,:,1)=[-3,-3,-3;
        -3,0,5;
        -3,5,5];
    k(:,:,2)=[-3,-3,5;
        -3,0,5;
        -3,-3,5];
    k(:,:,3)=[-3,5,5;
        -3,0,5;
        -3,-3,-3];
    k(:,:,4)=[-3,-3,-3;
        -3,0,-3;
        5,5,5];
    k(:,:,5)=[5,5,5;
        -3,0,-3;
        -3,-3,-3];
    k(:,:,6)=[-3,-3,-3;
        5,0,-3;
        5,5,-3];
    k(:,:,7)=[5,-3,-3;
        5,0,-3;
        5,-3,-3];
    k(:,:,8)=[5,5,-3;
        5,0,-3;
        -3,-3,-3];
    kk=zeros(size(f));
    I=double(f);
    for i=1:8
        f_k(:,:,i)=conv2(I,k(:,:,i),'same');
        kk=max(kk,f_k(:,:,i));
    end
    f_kk=imbinarize(kk,600);
    subplot(2,3,5);imshow(f_kk);title('Krisch算子');
     
    %------LoG算子-------
    log1=[0 0 -1 0 0;
        0 -1 -2 -1 0;
        -1 -2 16 -2 -1;
        0 -1 -2 -1 0;
        0 0 -1 0 0];
     
    f_l=conv2(f,log1,'same');
    f_ll=imbinarize(abs(f_l),300);
    subplot(2,3,6);imshow(f_ll);title('LoG算子');

     

    非matlab自带   Kirsch算子

    (参考https://blog.csdn.net/u014485485/article/details/78339420

    clear;clc;close all
    
    %读取图像
    bw1=imread('Lena512.png');
    %bw1=rgb2gray(bw1);
    figure;imshow(bw1,[]);title('Original Image');
    
    %均值滤波
    bw2=filter2(fspecial('average',3),bw1);
    %高斯滤波
    bw3=filter2(fspecial('gaussian'),bw2);
    %利用小波变换对图象进行降噪处理
    [thr,sorh,keepapp]=ddencmp('den','wv',bw3);     %获得除噪的缺省参数
    bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理
    
    %提取图象边缘
    t=[0.8 1.0 1.5 2.0 2.5].*10^5 ;     %设定阈值
    bw5=double(bw4);            
    [m,n]=size(bw5);             
    g=zeros(m,n); 
    d=zeros(1,8);
    %利用Kirsch算子进行边缘提取
    for i=2:m-1
       for j=2:n-1
           d(1) =(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; 
           d(2) =((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; 
           d(3) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2; 
           d(4) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2; 
           d(5) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2; 
           d(6) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2; 
           d(7) =(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; 
           d(8) =(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;      
           g(i,j) = max(d);
        end
    end 
    
    %显示边缘提取后的图象
    figure(2)
    for k=1:5
        for i=1:m
            for j=1:n
                if g(i,j)>t(k)
                    bw5(i,j)=255;           
                else
                    bw5(i,j)=0;
                end
            end
        end
        subplot(1,5,k)
        imshow(bw5,[])
        title(['Kirsch' '   ' num2str(t(k))])
    end

    最后我之前自己写的梯度法:

    I=imread('1.jpg');
    I=rgb2gray(I);
    T=10;%阈值
    [x,y]=gradient(double(I));   %获取梯度
    t=sqrt(x.^2+y.^2);  
    I(t>=T)=255;           %梯度提取边缘 画黑
    I(t<T)=0;
    I=uint8(I);
    imshow(I);
    
    imwrite(I,'my开方梯度.jpg');  %保存图像到当前目录

    本人水平有限,难免有错误疏漏,还望大佬多多批评指正。

    展开全文
  • 数字图像处理matlab实现知识点总结 5-10 杨杰

    千次阅读 多人点赞 2018-01-04 22:20:28
    第五章图像增强 两个方法: 1)空间域增强:点处理,模板处理即领域处理 2)频率域增强:高低通滤波,同态滤波 1.空间域图像增强 1)点处理 基于灰度变换 灰度线性变换 作用:对每一个像素灰度做...

    第五章图像增强

    这里写图片描述

    两个方法:

    1)空间域增强:点处理,模板处理即领域处理
    2)频率域增强:高低通滤波,同态滤波

    1.空间域图像增强

    1)点处理

    基于灰度变换

    • 灰度线性变换
      作用:对每一个像素灰度做线性拉伸
      gx,y=afx,y+b
      适用于:对曝光不足或过度的图片,即图像灰度局限在一个很小的范围。
      这里写图片描述
      这里写图片描述
    • 分段线性变换
      作用:增强对比度。突出关注的部分,相对抑制不受关注的灰度区间。

    这里写图片描述

    这里写图片描述
    这里写图片描述

    • 反转变换(imcomplement)
      s=L1r
      作用:增强嵌入图像暗色区域的白色或灰色细节,特别是当黑色面积占主导地位时。
      这里写图片描述
    • 对数变换(动态范围压缩)
      s=clog1+r
      作用:扩张较小的灰度范围,压缩数值较大的灰度范围
      这里写图片描述

    基于直方图(概率密度图)

    反映了数字图像每一灰度级与其出现频率间的关系,它能描述该图像的概貌。

    • 直方图均衡化
      将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像。
      这里写图片描述
      1)统计原始图像的直方图:prrk=nk/n,
      rk是归一化的输入图像灰度级。
      2)计算直方图累积分布曲线,
      sk=Trk=sumPrrj=sumnj/n
      3)用累积分布函数作为变换函数进行图像灰度变换。
      这里写图片描述

    实质:减少图像的灰度级以换取对比度的加大。

    这里写图片描述
    这里写图片描述

    实验结果:
    1)变换后趋于平坦,灰度级减少,灰度合并
    2)原始图像含有像素较多的几个灰度间隔拉大了,压缩的只是像素数较少的几个灰度级,实际视觉能够接收的信息量大大增强了。

    • 直方图规定化
      1)使用情况:
      需要具有特定的直方图的图像,以便能够增强图像中某些灰度级。
      2)作用:
      使原图像灰度直方图变成规定形状的直方图而对图像作修正的增强方法。

    规定化思想:
    这里写图片描述

    具体计算过程:
    这里写图片描述
    这里写图片描述

    一个规定化实例:
    这里写图片描述

    直方图均衡化处理是直方图规定化的一个特例。

    2)局部统计法

    平滑滤波器

    • 局部平滑法
      假设图像是由许多灰度恒定的小块组成,相邻像素间存在很高的空间相关性,而噪声则是统计独立的。
      方法:
      用邻域内各像素的灰度平均值代替该像素原来的灰度值,实现图像的平滑。
      作用:
      信号与噪声的方差比可望提高M倍。
      主要缺点:
      在降低噪声的同时使图像产生模糊,特别在边缘和细节处。而且邻域越大,在去噪能力增强的同时模糊程度越严重
      这里写图片描述

    效果图:
    这里写图片描述

    • 超限像素平滑法
      对邻域平均法稍加改进,可导出超限像素平滑法。将fx,y和邻域平均gx,y的差的绝对值与选定的阈值进行比较,根据比较结果决定点x,y的最后灰度gx,y.
      这里写图片描述
      特点:
      这算法对抑制椒欲噪声比较有效,对保护仅有微小灰度差的细节及纹理也有效。可见随着邻域增大,去噪能力增强,但模糊程度也大。同局部平滑法相比,超限像元平滑法去椒盐噪声效果更好。
      效果图:
      这里写图片描述
    • 空间低通滤波
      邻域平均法可看作一个掩模作用于图像fx,y的低通空间滤波,掩模就是一个滤波器,它的响应为Hr,s,于是滤波输出的数字图像gx,y用离散卷积表示为
      这里写图片描述
      掩模不同,中心点或邻域的重要程度也不相同,因此,应根据问题的需要选取合适的掩模。但不管什么样的掩模,必须保证全部权系数之和为单位值,这样可保证输出图像灰度值在许可范围内,不会产生“溢出”现象。
      这里写图片描述

    锐化滤波器

    突出边缘和轮廓信息,增强图像的边缘或轮廓。

    图像平滑通过积分过程使得图像边缘模糊,图像锐化则通过微分而使图像边缘突出 、清晰。

    • 梯度锐化法
      对于图像fx,yx,y处梯度定义为:
      这里写图片描述
      梯度是一个矢量,其大小和方向为:
      这里写图片描述
      Roberts\Prewitt\Sobel算子
      这里写图片描述
      这里写图片描述

    • 拉普拉斯算子:
      这里写图片描述
      这里写图片描述

    2.频率域图像增强

    这里写图片描述

    平滑滤波器

    • 理想低通滤波器
      传递函数:
      这里写图片描述
      效果图:
      这里写图片描述

    特点:有陡峭频率的截止特性,但会产生振铃现象使图像变得模糊,具有物理不可实现性。

    • 巴特沃斯低通滤波器
      传递函数:
      这里写图片描述
      效果图:
      这里写图片描述

    特点:传递函数比较平滑,连续性衰减,D0截止频率,没有振铃效果。

    • 指数低通滤波器
      传递函数:
      这里写图片描述
      效果图:
      这里写图片描述

    特点:图像边缘的模糊程度较用巴特沃斯滤波产生的大些,无明显振铃效应。

    • 梯形低通滤波器
      传递函数:
      这里写图片描述
      效果图:
      这里写图片描述

    特点:是理想低通和完全平滑的折中,性能介于理想低通和指数滤波之间,有一定模糊和振铃效应。

    锐化滤波器

    消除模糊,突出边缘。
    这里写图片描述
    - 理想高通滤波器
    传递函数:
    这里写图片描述
    效果图:
    这里写图片描述

    • 指数高通滤波器
      传递函数:
      这里写图片描述

    • 梯形高通滤波器
      传递函数:
      这里写图片描述
      效果图:
      这里写图片描述

    同态滤波器

    这里写图片描述
    效果图:
    这里写图片描述
    特点:能消除乘性噪声,能同时压缩图像的整体动态范围,并增加图像中相邻区域间的对比度。
    例子:
    HH代表高频增益,HL代表低频增益,一般HH>1HL<1
    这里写图片描述

    这里写图片描述

    频域滤波可以很灵活的解决加性畸变问题,而无法消除乘性或卷积噪声,例如物体受到光照明暗不均的时候这时需要用同态滤波。

    总结:

    1)频率域法把图像看成一种二维信号,对其进行基于傅里叶变换的信号增强。采用低通滤波去掉图中噪声,高通滤波增强边缘等高频信号,使模糊图片变得清晰,空间域算法代表的有平均值法和中值滤波法等

    第八章图像分割

    好的图像分割具有的特征:

    1)分割出来的各区域对某种性质(灰度、纹理)而言具有相似性,区域内部是连通的且没有过多小孔。
    2)相邻区域对分割所依据的性质有明显的差异。
    3)区域边界是明确的。

    1、基于阈值的分割方法

    适用于:图像的直方图具有比较明显的双峰或多峰时。
    基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。因此,该类方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。

    • 全局阈值:
    • 1)人工选择法
    • 2)直方图技术选择法:把阈值设在直方图的谷
    • 3)迭代式阈值选择法:特征:(1)能够快速收敛;(2)在每个迭代过程中新产生的阈值优于上一次的阈值。
    • 步骤:(1)选择灰度中值作为初始阈值T0
    • (2)利用阈值Ti将图像分割成两个区域——R1R2,用式子算出区域R1R2的灰度均值U1U2;
    • (3)利用式子Ti+1=1/2u1+u2算出新的阈值T_i_+_1);
    • (4)重复(2),(3),直到Ti+1Ti的差小于某个给定的值。
    • 4)最大类间阈值选择法(Otsu):前提:双峰分布;
    • 原理:以最佳阈值将图像的灰度直方图分割成两部分,使两部分之间的方差取得最大值,即分离性最大。
    • 做法:以阈值K将所有的像素分为目标C0和背景C1两类。其中C0类的像素灰度级为0~k-1,C1类的像素灰度级为k~L-1.
      这里写图片描述

    2、基于边缘的分割方法

    所谓边缘是指图像中两个不同区域的边界线上连续的像素点的集合,是图像局部特征不连续性的反映,体现了灰度、颜色、纹理等图像特性的突变。通常情况下,基于边缘的分割方法指的是基于灰度值的边缘检测,它是建立在边缘灰度值会呈现出阶跃型或屋顶型变化这一观测基础上的方法。
    阶跃型边缘两边像素点的灰度值存在着明显的差异,而屋顶型边缘则位于灰度值上升或下降的转折处。正是基于这一特性,可以使用微分算子进行边缘检测,即使用一阶导数的极值与二阶导数的过零点来确定边缘,具体实现时可以使用图像与模板进行卷积来完成。
    这里写图片描述

    • 1)Roberts算子:利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于平滑处理,因此不具备抑制噪声能力。对有陡峭边缘且含有噪声较少的图像效果较好。
    • 2)Prewitt算子和Sobel算子:对图像先加权平滑再做微分运算,所不同的是平滑部分的权值有些差异,因此对噪音有一定抑制能力,Sobel比Prewitt抑制能力更好,但不能完全排除检测结果中出现的虚假边缘。
    • 3)拉普拉斯:无方向的二阶微分算子,对图像中的阶跃边缘定位准确,对噪声敏感,使得噪声成分得到加强,这些特性容易使得丢失一部分边缘的方向信息,容易造成一些不连续的检测边缘。
    • 4)高斯-拉普拉斯(LOG):克服拉普拉斯抗噪声能力差的特点,但在抑制噪声的同时将原有的比较尖锐的边缘也平滑掉了。

    3、基于区域的分割方法

    将图像按照相似性准则分成不同的区域,主要考虑像素之间邻域像素之间的关系。

    • 种子区域生长法
      是从一组代表不同生长区域的种子像素开始,接下来将种子像素邻域里符合条件的像素合并到种子像素所代表的生长区域中,并将新添加的像素作为新的种子像素继续合并过程,直到找不到符合条件的新像素为止。该方法的关键是选择合适的初始种子像素以及合理的生长准则。

    • 区域分裂合并法(Gonzalez,2002)
      基本思想是首先将图像任意分成若干互不相交的区域,然后再按照相关准则对这些区域进行分裂或者合并从而完成分割任务,该方法既适用于灰度图像分割也适用于纹理图像分割。

    • 分水岭法(Meyer,1990)
      一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。
      该算法的实现可以模拟成洪水淹没的过程,图像的最低点首先被淹没,然后水逐渐淹没整个山谷。当水位到达一定高度的时候将会溢出,这时在水溢出的地方修建堤坝,重复这个过程直到整个图像上的点全部被淹没,这时所建立的一系列堤坝就成为分开各个盆地的分水岭。分水岭算法对微弱的边缘有着良好的响应,但图像中的噪声会使分水岭算法产生过分割的现象。

    基于边缘的分割方法根据区域间灰度不连续性通过搜寻区域之间的边界来处理;
    基于阈值的分割方法通过用以像素性质的分布为基础的阈值来处理。

    4、基于图论的分割方法

    此类方法把图像分割问题与图的最小割(min cut)问题相关联。
    首先将图像映射为带权无向图G=<VE>,图中每个节点N∈V对应于图像中的每个像素,每条边∈E连接着一对相邻的像素,边的权值表示了相邻像素之间在灰度、颜色或纹理方面的非负相似度。而对图像的一个分割s就是对图的一个剪切,被分割的每个区域C∈S对应着图中的一个子图。而分割的最优原则就是使划分后的子图在内部保持相似度最大,而子图之间的相似度保持最小。基于图论的分割方法的本质就是移除特定的边,将图划分为若干子图从而实现分割。目前所了解到的基于图论的方法有GraphCut,GrabCut和Random Walk等。

    5、基于能量泛函的分割方法

    该类方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是使用连续曲线来表达目标边缘,并定义一个能量泛函使得其自变量包括边缘曲线,因此分割过程就转变为求解能量泛函的最小值的过程,一般可通过求解函数对应的欧拉(Euler.Lagrange)方程来实现,能量达到最小时的曲线位置就是目标的轮廓所在。按照模型中曲线表达形式的不同,活动轮廓模型可以分为两大类:参数活动轮廓模型(parametric active contour model)和几何活动轮廓模型(geometric active contour model)。

    6.二值图像处理

    1)数学形态学图像处理

    腐蚀:去除图像中小的物体
    膨胀:可以填补空洞
    开运算:平滑边界并不改变面积
    闭运算:填充空洞,连接邻近物体并不改变面积

    2)基本形态学算法

    边界提取(bwperim):A-(B腐蚀A)
    区域填充(bwfill)

    第九章彩色图像处理

    1.彩色基础

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    2.彩色模型

    1)RGB模型:在彩色显示器、彩色摄影机中广泛使用。
    2)CMY/CMYK模型:用于彩色打印
    3)HSI 模型:与人描述和揭示颜色的方式最相近,便于认为指定颜色。

    2.1CMY模型

    这里写图片描述
    这里写图片描述
    这里写图片描述

    CMY与RGB转换:

    这里写图片描述

    CMY=imcomplementRGB

    2.2HSI模型

    这里写图片描述
    这里写图片描述
    这里写图片描述

    三原色的各个分量:

    这里写图片描述
    这里写图片描述
    这里写图片描述

    3.彩色图像处理

    分为两大类:
    1)全彩色处理:图像为彩色
    2)伪彩色处理:图像为灰度图,为每个灰度区间赋予不同的颜色二成为彩色图。

    3.1.伪彩色处理

    这里写图片描述

    3.1.1强度分层

    这里写图片描述

    3.1.2灰度级到彩色变换

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    3.2全彩色处理

    两种方法:
    1)独立的处理彩色图像的RGB分量图像,然后组合成为一幅彩色图像。前提:(1)既适用于向量也可用于标量;(2)应用与向量时,各分量的处理结果互不相关
    2)将每个像素的RGB值看成一个整体,即一个3维向量,对着整体的属性进行处理。

    3.2.1全彩色分割

    1)HSI彩色空间分割
    基于彩色分割一副图像,不想在单独的平面执行处理。
    2)RGB彩色空间分割
    分割目的:对给定图像中每一个RGB像素进行分类,需要相似性度量:欧氏距离。

    第十章、图像表示与描述

    1.颜色描述

    对图像尺寸、方向
    视角依赖性较弱,具有较高的稳定性

    灰度特征:

    这里写图片描述

    直方图特征

    图像灰度概率密度的估计
    这里写图片描述

    特征:
    这里写图片描述

    颜色矩

    描述颜色的分布
    颜色分布信息主要集中在低阶矩,例如:一阶矩、二阶矩、三阶矩

    一阶矩:定义了每个颜色分量的平均值
    二阶矩:定义了颜色分量的方差
    三阶矩:定义了颜色分量的偏斜度
    颜色矩特征和颜色直方图一样都缺乏对颜色空间分布信息的表示,不能区分颜色区域的控件分布位置。

    2.纹理描述

    三要素:
    1)某种局部的序列性,
    2)序列是由基本部分非随机排列组成的
    3)各部分大致都是均匀的统一体,纹理区域内任何地方都有大致相同的尺寸结构
    分类:
    1)人工纹理:有规律
    2)天然纹理:无规律
    与颜色特征不同,纹理特征不是基于像素点的特征,它需要包含多个像素点的区域中进行统计计算。
    优势:可以避免由于局部偏差造成的匹配失败
    特征:旋转不变性,较强抗噪声抵抗性
    缺点:1)当图片分辨率变化时,计算出来的纹理会有较大偏差
    2)可能受光照反射情况影响
    特征表示方法:
    1)统计法:提取相关函数
    自相关函数:
    这里写图片描述
    2)模型法:
    灰度差分统计:
    当直方图分布较平坦时,则ASM较小,ENT较大;当hgk在原点附近集中分布时,则MEAN较小,反之MEAN较大
    这里写图片描述
    3)几何法:寻找规律
    灰度共生矩阵
    精确地反映纹理粗糙程度和重复方向
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    4)频谱法:描述周期
    频谱特征:
    基于傅里叶频谱的一种纹理描述。

    3.边界描述

    边界表达

    主要借助区域的外部特征即区域的边界来描述区域。
    1)链码
    这里写图片描述
    2)多边形近似

    这里写图片描述
    3)标记图

    边界特征描述

    1)边界长度
    2)边界直径
    3)长轴、短轴、离心率
    4)曲率:斜率的变化率

    4.区域描述

    1)区域面积
    2)位置和方向
    3)周长
    4)长轴和短轴
    5)区域简单特征的计算
    拓扑描述:孔(H);连接部分(C);欧拉数(E=C-H)
    形状描述:矩形度(R);圆形度(C);偏心度(e)

    运用主成分进行描述

    主成分基础、主成分描述

    特征提取案例

    粒度测定、圆形目标判别、运动目标特征提取

    展开全文
  • 基于Retinex的图像去雾算法MATLAB实现)

    万次阅读 多人点赞 2020-04-17 03:22:08
    通常图像增强算法(例如直方图均衡算法以及更加强大的CLAHE)或多或少都有一定的去雾效果,只是这个效果有强有若罢了。本文将讨论另外一类十分重要的图像增强算法——Retinex算法。并在MATLAB中实验一下这类方法的...
  • 图像处理中经常遇到需要提高图像亮度或者曝光度的时候,所以我实验了一种比较有效的算法算法很简单: I表示要处理的较暗图像,T表示处理后的比较亮的图像 T(x)=I(x)+(1-I(x))*I(x) 算法...
  • matlab实现分水岭算法处理图像分割

    万次阅读 多人点赞 2011-08-08 14:06:29
    此程序为优化后的分水岭算法,避免了图像过分割 I= imread('D:\Images\pic_loc\1870405130305041503.jpg'); imshow(I); h=fspecial('sobel'); %h = fspecial(type) crea
  • Matlab 图像特征提取

    万次阅读 2018-10-11 10:50:59
    图像处理过程中,尤其是图像相似度的匹配,在图片量比较小的情况下,深度学习的效果往往达不到期望,所以需要利用传统图像处理的方法,对图像特征进行提取,常用的方法有lbp,hog,sift,surf。 lbp算法主要是对图片...
  • 基于MATLAB的人脸识别算法的研究

    万次阅读 多人点赞 2019-03-27 09:34:33
    基于MATLAB的人脸识别算法的研究 ...今天我们将从MATLAB图像识别说起,后边将陆续讲解车牌识别,交通标牌识别等,并努力将它移植到FPGA里边做到高速实时处理MATLAB人脸识别的处理过程: 1....
  • Matlab 图像处理工具箱

    千次阅读 2015-04-08 21:51:24
    计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理和计算机视觉的许多功能,但是术业有专攻,在进行深入的视觉算法研究的时候Matlab的自带功能难免会不够用。本文收集了一些比较优秀的Matlab计算机...
  • 白平衡,即所谓的白色的平衡。 白平衡的算法有很多,这里记录的是最简单实用的白平衡算法,即灰色世界法!
  • MATLAB图像处理之图像边缘提取

    万次阅读 2018-10-02 23:06:53
    MATLAB中有几种算法可以对图像进行边缘提取,其中一种就是edge算法,这个edge算法中有好几个算子,每一个算子分别对应着一种边缘提取的原理,接下来就来看一下几种方法的异同 %读取一张图片,并显示 original_...
  • 图像增强的方法分类:1 从处理对象分类:灰度图像,(伪)彩色图像2 从处理策略分类:全局处理,局部处理(ROI ROI,Region of Interest Interest)3 从处理方法分类:空间域(点域运算,即灰度变换;邻域方法,...
  • 基于MATLAB图像去噪

    2018-05-03 02:25:20
    新人求用MATLAB实现小波变换和中值滤波结合去噪的源码,用来对灰度图像进行处理MATLAB版本2016a
  • BSCB 图像修复算法 Matlab 仿真-(2000)

    千次阅读 2015-07-05 21:16:49
    参考文献:Bertalmio M, Sapiro G, et al.Image Inpainting[C]// Proceedings of the SIGGRAPH. New Orleans, USA, 2000:417-424.
  • 一、photoshop图像滤镜——浮雕算法 浮雕的算法是对图像的每一个点进行卷积处理,采用的矩阵如下  [1 0 0;0 0 0;00-1]; 假设原图像为X,处理后的图像为Y ,也就是说,对于坐标为(i,j)点,其浮雕...
  • matlab中imresize函数

    万次阅读 多人点赞 2015-09-08 16:25:39
    函数功能:该函数用于对图像做缩放处理。 调用格式: B = imresize(A, m) 返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1, 则放大图像; m小于1, 缩小图像。 B = imresize(A,
  • 车牌图像倾斜校正算法MATLAB实现

    万次阅读 多人点赞 2019-03-20 17:13:58
    车牌校正是车牌定位和字符分割的一个...本部分主要讲车牌图像倾斜校正算法MATLAB实现,包括Hough变换法和Radon变换法等。 1. 基于Hough变换的车牌图像倾斜校正算法 利用Hough变换检测车牌的边框,确定边框直线...
  • 最近在学习MATLAB图像分割部分,现将几个边缘检测算法分享。 有sobel算法、prewitt算法、log算法 图1 图2 如图2所示,使用sobel算法处理rgb彩色图像 sobelBW1R为彩图R通道提取的边缘, sobelBW1G为G...
1 2 3 4 5 ... 20
收藏数 27,101
精华内容 10,840
关键字:

图像处理算法matlab