clc;
clear all;
close all;
%边缘测测试图像(Detection of Edge)
I=im2double(imread('D:\Gray Files\10-16.tif'));
[M,N]=size(I);%%
%=============================边缘检测(四)=================================
% Marr-Hildreth算法,LoG
%-------------------------产生高斯低通滤波器(高斯内核)-------------------
n=25;
n_l=floor(n/2);
Gaussian=zeros(n,n);
delta=4;
for i=-n_l:n_lfor j=-n_l:n_l%计算点(x,y)到中心点的距离D=(i)^2+(j)^2;%用滤波器乘以主函数 Gaussian(i+n_l+1,j+n_l+1)=exp(-D/(2*delta^2));end
end
%找到抽样最小值
m=min(Gaussian(:));
Gaussian=floor(Gaussian/m);
%忽略半径大于3*delta的取值,即置零
for i=-n_l:n_lfor j=-n_l:n_l%计算点(x,y)到中心点的距离d=sqrt((i)^2+(j)^2);%将大于3*delta的取值置零if d>3*deltaGaussian(i+n_l+1,j+n_l+1)=0;endend
end
%-------------------高斯内核与图像卷积-------------------------------------
g_LoG=zeros(M,N);
%对原图进行扩展,方便处理边界
I_pad=padarray(I,[n_l+1,n_l+1],'symmetric');
for i=1:Mfor j=1:N%获得图像子块区域Block=I_pad(i:i+2*n_l,j:j+2*n_l);%用Kirsch内核对子区域卷积     g_LoG(i,j)=sum(sum(Block.*Gaussian));end
end
n=25;
sigma=4;
type='symmetric';
g_LoG=GaussianBlur(n,I,sigma,type);
% imshow(g_LoG)
%-------------------拉普拉斯算子与上述卷积结果进行卷积---------------------
%拉普拉斯算子
L=[1 1 1;1 -8 1;1 1 1];
%系数
a=-1;
len=1;
%对原图进行扩展,方便处理边界
g_LoG_pad=padarray(g_LoG,[len+1,len+1],'symmetric');
g_Laplacian=zeros(M,N);
g_L=zeros(M,N);
for i=1+len:M-lenfor j=1+len:N-len%从扩展图像中,取出局部图像Block=g_LoG_pad(i-len:i+len,j-len:j+len);%保留拉普拉斯算子的运算结果g_L(i-len,j-len)=a*sum(sum(Block.*L));end
end
%计算Laplacian算子标定值
m_min=min(g_L(:));
img=(-m_min+g_L);
g_BiaoDing=img/max(img(:));
% imshow(g_BiaoDing)%-----------------------0值跨界边界搜索------------------------------------
%设定门限
% th=0.04;
th=0.112;
n_max=max(g_L(:));
T=th*n_max;
ind=find(g_L>T)
%图像二值化
g_b=zeros(M,N);
g_b(ind)=1;%对二值图像周边以0扩展
g_b_pad=padarray(g_b,[1,1]);
%0值跨界,寻找边界
g_z=zeros(M,N);
for i=2:M+1for j=2:N+1%以0或者1为中心if g_b_pad(i,j)==1%计算以(i,j)为中心点的四个对角是否相异if xor(g_b_pad(i-1,j-1),g_b_pad(i+1,j+1))||... %左对角xor(g_b_pad(i-1,j+1),g_b_pad(i+1,j-1))||...%右对角xor(g_b_pad(i,j-1),g_b_pad(i,j+1))||...%行相对xor(g_b_pad(i-1,j),g_b_pad(i+1,j)) %列相对g_z(i-1,j-1)=1;endendend
end
imshow(g_z)

高斯模糊GaussianBlur函数:


function [g]=GaussianBlur(n,I,sigma,type)[M,N]=size(I);%生成高斯核函数G=GaussianKernelG(n,sigma);%平滑图像n_l=n-1;g=zeros(M,N);%对原图进行扩展,方便处理边界I_pad=padarray(I,[n_l,n_l],type);for i=1:Mfor j=1:N%获得图像子块区域Block=I_pad(i:i+n_l,j:j+n_l);%用Kirsch内核对子区域卷积     g(i,j)=sum(sum(Block.*G));endend%归一化g=g/max(g(:));end%生成高斯核函数% n 核函数的大小function G=GaussianKernelG(n,sigma)n_l=floor(n/2);%初始化G=zeros(n,n);%产生高斯核矩阵for i=-n_l:n_lfor j=-n_l:n_l  d=i^2+j^2;G(i+n_l+1,j+n_l+1)=exp(-(d)/(2*sigma^2));endend%寻找最小值m=sum(G(:));%取整G=G/m;%将大于3*delta的取值置零for i=-n_l:n_lfor j=-n_l:n_l d=sqrt(i^2+j^2);if d>3*sigmaG(i+n_l+1,j+n_l+1)=0;endendendend

图像分割——边缘检测——LoG(Marr-Hildreth算法)(Matlab)相关推荐

  1. Edge Detector ----------Marr Hildreth 算法

    先说算法过程 1. 用Gaussian Filter平滑图像 2. 求Laplacian 二阶导           Laplacian参考http://blog.csdn.net/traumland ...

  2. 【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

    目录 一.二阶算子简介 二.laplace(拉普拉斯算子) 1.什么是拉普拉斯算子 (1)连续二维函数的二阶导 (2)离散二维函数的二阶导数 2.常用算子模块及代码 3.结果 三.log算子 1.什么 ...

  3. 【图像处理】——Python图像分割边缘检测算法之一阶梯度算子(Roberts、Prewitt、Sobel、 Kirsch、Canny算子)

    目录 前言 一.边缘检测算法 1.一阶算子 2.二阶算子 二.一阶算子 原图像lena 1.Roberts算子 不同方向的算子模板 梯度的计算 系统代码: 自定义函数代码 结果 2.Prewitt 不 ...

  4. 基于Matlab的图像分割----边缘检测

    在一幅图像中,人们往往只对其中的某些目标感兴趣,而这些目标通常占据一定的区域,并且在某些特性上(如灰度,轮廓,颜色及纹理等)上和周围的图像有差别.这些差别可能很明显也可能很微小,随着计算机图像处理技术 ...

  5. 图像分割matlab阈值自动计算,图像分割的阈值算法matlab实现.doc

    图像分割的阈值算法matlab实现.doc 图像分割的阈值算法matlab实现[OTSU,1DEntropy,2DEntropy]今天看了几篇论文,实现了一下,没有验证各算法的有效性也没有进行定量比较 ...

  6. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...

  7. mean shift聚类matlab,meanshift目标跟踪源程序 meanshift跟踪算法MATLAB源码 - 下载 - 搜珍网...

    压缩包 : MeanShift+深入详细(MatLab源码).rar 列表 MeanShift+深入详细(MatLab源码)/meanshift文章.PPT.word文档.基于meanshift的跟踪 ...

  8. matlab kfcm,KFCM算法MATLAB

    KFCM算法MATLAB matlab 2020-11-18 下载地址 https://www.codedown123.com/51200.html 分别用kmeans.fcm.kfcm实现图像分割 ...

  9. 均值漂移(mean shift )聚类算法Matlab实现详解

    Mean shift 算法是基于核密度估计的爬山算法,可用于聚类.图像分割.跟踪等,其在声呐图像数据处理也有广泛的应用,笔者在网上找了一遍也没有找到关于Mean shift的matlab实现代码,找到 ...

最新文章

  1. IDP申请直到软件上架流程 - iOS
  2. 剑指offer5 从尾到头打印链表
  3. 图片指定区域根据rgb值计算出对应的坐标地址_【水文】震惊!高考期间,这位学生居然能通过图片隐写实现文字通信!...
  4. python元组支持双向索引吗_2、Python列表和元组
  5. Python 空值与非空值
  6. Hive _分桶及抽样查询
  7. KindEditor 4 输入框限定字数
  8. linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
  9. ZZULIOJ 1099: 角谷猜想(多实例测试)
  10. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...
  11. 火狐浏览器配置webDriver
  12. 【报告分享】2021抖音数据报告.pdf(附下载链接)
  13. 计算机应用研究参考文献格式,参考文献编写规则-计算机应用研究.PDF
  14. android写轮眼,打造iOS般流畅的安卓 神器写轮眼使用教程
  15. php 开发常用英语单词
  16. 在标准ASCII码表中,已知英文字母K的十六进制码值是4B,则二进制ASCII码1001000对应的字符是( )
  17. 【Linux入门指北】Linux实验综合训练
  18. STM32 FMPI2C 简单访问代码
  19. ble4.2空口包详解(air interface packets)
  20. 啊哈C——学习4.10一起来找茬

热门文章

  1. mte(Mesh Terrain Editor)快速上手
  2. Mac苹果电脑出现“磁盘空间不足”通知如何释放磁盘内存空间?
  3. STM32 同一定时器四路不同占空比PWM输出+舵机角度精准控制
  4. 使用 Unicode 编码
  5. 诗经 - 小雅 - 常棣
  6. 用php写登录成功后的界面,登录成功后跳转_php如何实现登录成功后跳转页面
  7. 【Javascript】【UI】wui-date日期时间选择器
  8. 阿里云物联网平台物模型数据解析脚本
  9. linux从命令行发送邮件
  10. android+5.0+彩蛋+华为,华为隐藏系统怎么弄