【信号处理】基于遗传算法的噪声图像的边缘检测(Matlab代码实现)

news2024/10/6 11:01:57

 目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

      图像的边缘是指图像灰度急剧发生变化的不连续的地方,主要存在于目标和目标、背景和目标、不同色彩的区域之间,包含着图像的重要信息,在图像分析和理解中起着重要作用。

     图像的边缘检测就是检测图像中灰度不连续的地方,是数字图像处理领域重要的分支之一。检测边缘的难点在于如何精确地定义边缘,随着研究的深入,学者提出了不同的边缘模型,多数边缘检测器的设计都基于某一种固定的边缘模型。例如,基于梯度的边缘检测方法将边缘视为灰度变化速率快的像素点集合,Konishi依据“边缘”和“非边缘”滤波器的统计规律来定义物体边缘",Peli 则提出基于视觉模型的算法3,将视觉可接受范围作为滤波频段,其阈值为人眼的对比敏感度。

📚2 运行结果

🎉3 参考文献

[1]徐艳蕾,赵继印,焦玉斌.噪声图像边缘检测方法的研究[J].计算机应用研究,2009,26(1):387-389

[2]刘闻,别红霞.基于蚁群算法的噪声图像边缘检测[J].软件,2013,34(12):256-259.

👨‍💻4 Matlab代码

部分代码:

function setNoiseImages(GUI_figure)
    global noises;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    shareData = guidata(GUI_figure);
    testImg = shareData.testImg;
    axes('Parent', GUI_figure,...
        'Units', 'normalized',...
        'Position',[0 1/2 1 1/2]*positionBase,...
        'Visible', 'off');
    imshow(imread(char(testImg.inImg)));
    for I = 1:length(noises)
        axes('Parent', GUI_figure,...
            'Units', 'normalized',...
            'Position',[(mod(I, imageNum)) floor((I)/imageNum)+1/2 1 1/2]*positionBase,...
            'Visible','off');
        imshow(imread(char(testImg.inNoise(I+1,:))));
    end
    text=uicontrol('Style','text',...
            'Units', 'normalized',...
            'Position',[3/7 19/20 1/7 1/20]*positionBase,...
            'String',strcat('Noise: 0%'));
    set(text,'BackGroundColor','red');
    for I = 1:imageNum
        text=uicontrol('Style','text',...
            'Units', 'normalized',...
            'Position',[(mod(I, imageNum))+3/7 floor((I)/imageNum)+19/20 1/7 1/20]*positionBase,...
            'String',['Noise: ', int2str(noises(I)*100), '%']);
        set(text,'BackGroundColor','red');
    end
    drawnow;
end

function updateNGain2Slider(hObj,event,GUI_figure)
    global noiseWeights;
    val=get(hObj,'Value');
    noiseWeights(3)=val;
    updateNGain2Text();
end

function updateNGain2Text()
    global noises;
    global noiseWeights;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+7/20 3/10 1/20]*positionBase,...
        'String',['Noise Gain 2: ',num2str(noiseWeights(3),2)]);
end

function updateGenerationsSlider(hObj,event)
    global generations;
    val=get(hObj,'Value');
    generations=round(val);
    updateGenerationsText();
end

function updateGenerationsText()
    global noises;
    global generations;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+17/20 3/10 1/20]*positionBase,...
        'String',['Generations: ',int2str(generations)]);
end

function updatePopSizeSlider(hObj, event)
    global popSize;
    val=get(hObj,'Value');
    popSize=round(val);
    updatePopSizeText();
end

function updatePopSizeText()
    global noises;
    global popSize;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+16/20 3/10 1/20]*positionBase,...
        'String',['Pop Size: ',int2str(popSize)]);
end

function updateBestMatrix(inMatrix)
    global noises;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uitable('Units', 'normalized',...
        'Position', [(imageNum-1) (imageNum-1)+2/20 1 5/20]*positionBase,...
        'Data', inMatrix);
end

function initialiseImages(GUI_figure)
    global noises;
    
    shareData = guidata(GUI_figure);
    img = shareData.img;
    testImg = shareData.testImg;
    
    % Generate and write noise and training images.
    for I=1:length(noises)
        writeLocation=strcat(testImg.inNoise(1), int2str(I), '.png');
        testImg.inNoise(I+1,:)=writeLocation;
        for II=1:5
            writeLocation=strcat(img(II).inNoise(1), int2str(I), '.png');
            img(II).inNoise(I+1,:)=writeLocation;
        end
    end

    createNoiseImage(testImg, noises, 'gaussian');

完整代码:

链接:https://pan.baidu.com/s/1EaaNNZpD-eLt4OzUnSSGNg 
提取码:22ns 
--来自百度网盘超级会员V2的分享

 目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

      图像的边缘是指图像灰度急剧发生变化的不连续的地方,主要存在于目标和目标、背景和目标、不同色彩的区域之间,包含着图像的重要信息,在图像分析和理解中起着重要作用。

     图像的边缘检测就是检测图像中灰度不连续的地方,是数字图像处理领域重要的分支之一。检测边缘的难点在于如何精确地定义边缘,随着研究的深入,学者提出了不同的边缘模型,多数边缘检测器的设计都基于某一种固定的边缘模型。例如,基于梯度的边缘检测方法将边缘视为灰度变化速率快的像素点集合,Konishi依据“边缘”和“非边缘”滤波器的统计规律来定义物体边缘",Peli 则提出基于视觉模型的算法3,将视觉可接受范围作为滤波频段,其阈值为人眼的对比敏感度。

📚2 运行结果

🎉3 参考文献

[1]徐艳蕾,赵继印,焦玉斌.噪声图像边缘检测方法的研究[J].计算机应用研究,2009,26(1):387-389

[2]刘闻,别红霞.基于蚁群算法的噪声图像边缘检测[J].软件,2013,34(12):256-259.

👨‍💻4 Matlab代码

部分代码:

function setNoiseImages(GUI_figure)
    global noises;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    shareData = guidata(GUI_figure);
    testImg = shareData.testImg;
    axes('Parent', GUI_figure,...
        'Units', 'normalized',...
        'Position',[0 1/2 1 1/2]*positionBase,...
        'Visible', 'off');
    imshow(imread(char(testImg.inImg)));
    for I = 1:length(noises)
        axes('Parent', GUI_figure,...
            'Units', 'normalized',...
            'Position',[(mod(I, imageNum)) floor((I)/imageNum)+1/2 1 1/2]*positionBase,...
            'Visible','off');
        imshow(imread(char(testImg.inNoise(I+1,:))));
    end
    text=uicontrol('Style','text',...
            'Units', 'normalized',...
            'Position',[3/7 19/20 1/7 1/20]*positionBase,...
            'String',strcat('Noise: 0%'));
    set(text,'BackGroundColor','red');
    for I = 1:imageNum
        text=uicontrol('Style','text',...
            'Units', 'normalized',...
            'Position',[(mod(I, imageNum))+3/7 floor((I)/imageNum)+19/20 1/7 1/20]*positionBase,...
            'String',['Noise: ', int2str(noises(I)*100), '%']);
        set(text,'BackGroundColor','red');
    end
    drawnow;
end

function updateNGain2Slider(hObj,event,GUI_figure)
    global noiseWeights;
    val=get(hObj,'Value');
    noiseWeights(3)=val;
    updateNGain2Text();
end

function updateNGain2Text()
    global noises;
    global noiseWeights;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+7/20 3/10 1/20]*positionBase,...
        'String',['Noise Gain 2: ',num2str(noiseWeights(3),2)]);
end

function updateGenerationsSlider(hObj,event)
    global generations;
    val=get(hObj,'Value');
    generations=round(val);
    updateGenerationsText();
end

function updateGenerationsText()
    global noises;
    global generations;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+17/20 3/10 1/20]*positionBase,...
        'String',['Generations: ',int2str(generations)]);
end

function updatePopSizeSlider(hObj, event)
    global popSize;
    val=get(hObj,'Value');
    popSize=round(val);
    updatePopSizeText();
end

function updatePopSizeText()
    global noises;
    global popSize;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uicontrol('Style','text',...
        'Units', 'normalized',...
        'Position',[(imageNum-1) (imageNum-1)+16/20 3/10 1/20]*positionBase,...
        'String',['Pop Size: ',int2str(popSize)]);
end

function updateBestMatrix(inMatrix)
    global noises;
    imageNum = ceil(sqrt((length(noises)+1)));
    positionBase = 1/imageNum;
    uitable('Units', 'normalized',...
        'Position', [(imageNum-1) (imageNum-1)+2/20 1 5/20]*positionBase,...
        'Data', inMatrix);
end

function initialiseImages(GUI_figure)
    global noises;
    
    shareData = guidata(GUI_figure);
    img = shareData.img;
    testImg = shareData.testImg;
    
    % Generate and write noise and training images.
    for I=1:length(noises)
        writeLocation=strcat(testImg.inNoise(1), int2str(I), '.png');
        testImg.inNoise(I+1,:)=writeLocation;
        for II=1:5
            writeLocation=strcat(img(II).inNoise(1), int2str(I), '.png');
            img(II).inNoise(I+1,:)=writeLocation;
        end
    end

    createNoiseImage(testImg, noises, 'gaussian');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新版SwitchHosts下载安装教程

文章目录前言一、SwitchHosts下载1.第一步2.第二步二、常见问题前言 SwitchHosts开源免费,社区稳定维护,特别香~ 一、SwitchHosts下载 https://github.com/oldj/SwitchHosts 1.第一步 打开上面的官网,之后往下面滑动,看到Swit…

Centos7 部署 VerneMQ 高可用集群

1.简要说明 1.1概述 VerneMQ首先是一个MQTT发布/订阅消息代理,它实现了OASIS行业标准MQTT协议;但是,VerneMQ还旨在通过提供一组与可扩展性,可靠性和高性能以及操作简单性相关的独特功能,将消息传递和物联网应用程序提…

Dynamics 365Online 应用内消息通知(In-app notifications)

应用内通知其实一直是个刚需,但D365一直缺乏这个功能,如果客户有需求,我们只有通过自定义的方式实现,好在V9以后顶部栏可以自定义了,可以自己加Icon,实现通知的样式。 好在2022WAV1后,D365终于加…

喜讯丨上海首家代谢组学技术研究民非机构-上海百趣代谢组学技术研究中心获批成立

经上海市科学技术委员会批复同意组建,由上海市民政局审批,上海百趣代谢组学技术研究中心正式成立。上海百趣代谢组学技术研究中心将联合科研单位、相关企业,共同推动代谢组学技术研究在检测方法、分析方法、检测仪器和数据库标准化方面的进步…

景联文科技:一文详解!如何选择一家专业的数据标注公司?

“近年来,人工智能发展速度迅速,三大决定性因素是:算法、算力和数据,数据是人工智能的基础。数据标注的精确度是行业内的一大重点,随着人工智能技术的不断成熟,对场景化数据的精确度要求将越来越高&#xf…

[附源码]Python计算机毕业设计Django游戏论坛网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

ChatGPT能否取代Google、Baidu,成为下一代搜索引擎?一文了解最近火出圈的ChatGPT

前 言 OpenAI这家公司又放大招了,继发布GPT、GPT2和GPT3模型后,本月初发布了ChatGPT模型【也被称为GPT3.5】,结合大家的测试效果来看,该模型效果确实很震撼,在人工智能圈子引起了不小的轰动。在AI发展相对处于低谷期的…

华为机试 - 机器人

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 现有一个机器人,可放置于 M N 的网格中任意位置,每个网格包含一个非负整数编号,当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可以在网格间移…

原生API编写简单富文本编辑器002

原生API编写简单富文本编辑器002 1. 为功能按钮添加点击事件 我们在index.js 中为所有功能按钮添加点击事件监听,在点击对应按钮时执行相应的原生命令。 window.onload function() {const btns document.getElementById(editorBar).getElementsByTagName(li);fo…

centos7安装xfce桌面后,桌面空白,只有openbox功能,解决办法

因为有openbox和图标桌面 两个模式 在登录时,输入密码,下一步,旁边<齿轮按钮>,选择 图标桌面,再登录 前期centos7安装xfce步骤 yum update yum install epel-release -y yum groupinstall -y “X Window system” yum grouplist //查看是否有xfce yum groupinstall -y …

ClickHouse在自助行为分析场景的实践应用

导读 公司每日产生海量数据&#xff0c;按业务需要进行统计产出各类分析报表&#xff0c;但巨大的数据量加上复杂的数据模型&#xff0c;以及个性化的分析维度&#xff0c;采用传统的离线预计算方式难以灵活支持&#xff0c;为此需引入一种满足实时多维分析场景的计算引擎框架…

Linux基础IO

基础IO&#x1f3de;️1. 系统文件I/O&#x1f4d6;1.1 接口介绍&#x1f4d6;1.2 creat系统调用&#x1f4d6;1.3 理解fd文件描述符&#x1f4d6;1.4 不按顺序的读取和写入&#x1f4d6;1.5 文件重命名&#x1f301;2. 理解Linux下一切皆文件&#x1f320;3. 理解重定向&#…

5G LAN赋能智慧工厂加速落地,四信5G工业路由器成最佳助攻

近年来&#xff0c;随着5G技术的蓬勃发展&#xff0c;信息技术与企业发展更加紧密结合已经成为未来企业发展的主要趋势。而作为“新基建”的代表&#xff0c;5G与工业网络的融合无疑成为未来5G网络的一个重要应用场景。 然而&#xff0c;在传统的工厂制造中&#xff0c;大多数设…

Java基础-面向对象综合练习-拼图游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们先来…

ADI Blackfin DSP处理器-BF533的开发详解5:PLL配置内核和系统时钟(含源代码)

又是一个熟悉的名词&#xff0c;PLL。 硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 PLL(Phase Locked Loop)是 ADSP-BF53x 的内核和时钟设置的机制&#xff0c;叫做锁相环。通过 P…

论文阅读笔记 | 三维目标检测——CenterPoint算法

如有错误&#xff0c;恳请指出。 文章目录0. 前言1. 背景2. 准备工作3. 网络结构3.1 RPN3.2 RCNN4. 实验结果paper&#xff1a;《Center-based 3D Object Detection and Tracking》&#xff08;2021CVPR&#xff09; 0. 前言 CenterPoint应该是与CenterNet是同一个团队的成果…

[附源码]Python计算机毕业设计Django在线项目管理

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

庄懂的TA笔记(十一)< >

庄懂的TA笔记&#xff08;十一&#xff09;&#xff1c; &#xff1e; 目录&#xff1a; 一、shader面板玩法 > 增广 : 多种 面板设计玩法&#xff1a; 二、shader参数类型 > 增广 &#xff1a;认识 多种参数类型 &#xff1a; 三、增广 &#xff1a;认识 IVO …

体验一下传说中可以干掉程序员的OpenAI ChatGPT

ChatGPT初体验 ​ OpenAI公司最近开发了一个新的聊天AI模型&#xff0c;ChatGPT。网上铺天盖地传言AI可以替代程序员。于是今天也来体验了一下。下面是一个使用的案例&#xff1a; ​ 首先看来他也不是万能的。 问&#xff1a; 今年世界杯冠军预测 ChatGPT: 对于世界杯的冠军…

【20221208】【排序专题】

一、冒泡排序&#xff08;稳定排序&#xff09; 思想&#xff1a;冒泡排序的思想就是比较当前数和后一个数的大小&#xff0c;将较大的数往后移动&#xff0c;这样可以确保一轮下来能将最大的数放在数组的最末端。然后重复此操作即可完成排序。 上面第一轮比较完&#xff0c;我…