• 经高斯滤波后用riberts算子边缘检测


    clc;close all;clear all

    %---------------------------------------------生成高斯平滑滤波模板-------------------------------------------------------------%

    hg=zeros(3,3); %设定高斯平滑滤波模板的大小为3*3

    delta=0.5;

    for x=1:1:3

    for y=1:1:3

    u=x-2;

    v=y-2;

    hg(x,y)=exp(-(u^2+v^2)/(2*pi*delta^2));

    end

    end

    h=hg/sum(hg(:));

    %------------------------------------------------读入图像------------------------------------------------------------------------%

    f = imread('F:\ZPB\3.tif'); % 读入图像文件

    f=rgb2gray(im2double(f));

    imshow(f)

    title('原始图像');

    [m,n]=size(f);

    ftemp=zeros(m,n);

    rowhigh=m-1;

    colhigh=n-1;

    %%%---------------------------------------------高斯滤波----------------------------------------%%%

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];

    A=h.*mod;

    ftemp(x,y)=sum(A(:));

    end

    end

    f=ftemp

    figure,imshow(f)

    title('通过高斯滤波器后的图像');

     

    %----------------------------------------利用roberts算子进行边缘检测--------------------------------------------------%

    sx=[-1 -2 -1;0 0 0;1 2 1];

    sy=[-1 0 1;-2 0 2;-1 0 1];%%%%%你可以替换成其他算子,这里是罗伯特算子

     

    % sx=[-1 -2 -1;0 0 0;1 2 1];

    % sy=[-1 0 1;-2 0 2;-1 0 1];这个是Sobel算子,类似的,你可以替换成canny算子等等

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];

    fsx=sx.*mod;

    fsy=sy.*mod;

    ftemp(x,y)=sqrt((sum(fsx(:)))^2+(sum(fsy(:)))^2);

    end

    end

    fr=im2uint8(ftemp);

    figure,imshow(fr)

    title('roberts算子边缘检测的原始图像');

     

    %--------------------------------------域值分割,这部分可不参---------------------------------------------------------------%

    TH1=60; %设定阈值

    for x=2:1:rowhigh-1

    for y=2:1:colhigh-1

    if (fr(x,y)>=TH1)&((fr(x,y-1) <= fr(x,y)) & (fr(x,y) > fr(x,y+1)) )

    fr(x,y)=200;

    elseif(fr(x,y)>=TH1)&( (fr(x-1,y) <=fr(x,y)) & (fr(x,y) >fr(x+1,y)))

    fr(x,y)=200;

    else fr(x,y)=50;

    end

    end

    end

    figure,imshow(fr)

    title('roberts算子边缘检测并细化后的图像');

       

  • 相关阅读:
    服务端实现url网页截屏、HTML保存为高质量PDF[puppeteer]
    网页保存为图片[rasterizeHTML]
    SortedList<T,K>,SortedDictionary<T,K>,Dictionay<T,K>用法区别
    svn实现类似git stash及git stash pop的功能
    MSBuild报错及找不到AxImp.exe或LC.exe问题
    记一个ios下text-overflow: ellipsis 与 text-align: justify 冲突的问题
    Chrome devtools inspect后打开空白解决办法
    Oracle长时间使用导致连接变慢且频繁报无法找到监听程序的错误
    vscode+vue不得不用的插件和不得不添加的配置
    初识vscode+vue
  • 原文地址:https://www.cnblogs.com/qxql2016/p/3843595.html
Copyright © 2020-2023  润新知