基于热传导矩阵(HCM)边缘检测方法在红外图像中的应用(Matlab代码实现)

news2024/11/18 23:01:58

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码实现

💥1 概述

1.1 基于热传导 (ED-HC) 的边缘检测旨在揭示或锐化红外图像中物体的边缘。
1.2 ED-HC的功能旨在根据红外图像中表面温度的条件和热流特性进行边缘检测。
1.3 热电偶校基于热传导基质。
1.4 HCM是一个特征矩阵,将固体和静止流体的热传导公式应用于红外图像,并检查相邻像素之间的差异值。
1.5 通过将ED-HC方法应用于灰度图像,该方法已被证明对灰度图像有效。
1.6 ED-HC方法在模糊度过高,亮度对比度低的红外图像中具有很强的性能。

📚2 运行结果

主函数代码:

clear all;
close all;
clc;
tic
%---------------------------------------------------------------------------
img = imread('K6.png');
img=rgb2gray(img);
img=imresize(img,1);
figure; imshow(img);

% STEP 1:Calculation of the average heat conduction matrix
%------------------------------------------------------------------------------------------
img1=img;

h=size(img1,1); 
w=size(img1,2); 

heatmat=zeros(h,w);


   for i=2: (h-2);
        for j=2: (w-2);
        maskGray=zeros(1,9) ;
       
          for b=1:9;
          [x]=ikomsu(b,i);
          [y]=jkomsu(b,j);
         
                       col = img1(x,y); 
                       maskGray (b) =col;
                        
          end
           
        [heat_top]=heattrans(maskGray);
        
        heatmat(i,j)=heat_top;

     end
   end
   
% STEP 2:Edge Detection
%-------------------------------------------------------------------------------------------- 
  for i=2: (h);
        for j=2: (w);
             if(heatmat(i,j)>100)
            edge_im(i,j)=255;
             else
            edge_im(i,j)=0;               
            
            
            end
                     
        end
 end
edge_im=uint8(edge_im);
figure; imshow(edge_im); title('Edge image');
toc
%-------------------------------------------------------------------------
% STEP 3: Image Quality Assessment for Edge Detection Aplication

%1.ESSIM

[ESSIM_index] = ESSIM(img,edge_im)

%2. IoU
IoU_Value=iou(img,edge_im)

%3. NCC
NCC_Value=NormalizedCrossCorrelation(img,edge_im)

%4.Edge Intensity
enh1 = sobel_enh_conv(edge_im);
edge_intensity = sum(enh1(:))  

%-----------------------------------------------------------------------------------
%FUNCTIONS
%-----------------------------------------------------------------------------------
function [x] = ikomsu( komsuno, i)

 if(komsuno ==1)
     x=i-1;
 elseif(komsuno ==2)
    x= i;
 elseif(komsuno ==3)
    x= i+1;
 elseif(komsuno ==4)
    x= i-1;
 elseif(komsuno ==5)
    x= i+1;
 elseif(komsuno ==6)
   x= i-1;
 elseif(komsuno ==7)
   x= i;
 elseif(komsuno ==8)
   x= i+1;
 else
    x=i;
 
 end


end

function [y] = jkomsu( komsuno, j )

 if(komsuno ==1)
    y= j-1;
 elseif(komsuno ==2)
    y= j-1;
 elseif(komsuno ==3)
   y= j-1;
 elseif(komsuno ==4)
   y= j;
 elseif(komsuno ==5)
   y= j;
 elseif(komsuno ==6)
   y= j+1;
 elseif(komsuno ==7)
   y= j+1;
 elseif(komsuno ==8)
   y= j+1;
 else
    y= j;
 
 end


end

function [ESSIM_index] = ESSIM(Ref_img, Dis_img)

Ref_img = double(Ref_img);
Dis_img = double(Dis_img);

if size(Ref_img,3)==3 
    Ref_img = 0.299 * double(Ref_img(:,:,1)) + 0.587 * double(Ref_img(:,:,2)) + 0.114 * double(Ref_img(:,:,3));
    Dis_img = 0.299 * double(Dis_img(:,:,1)) + 0.587 * double(Dis_img(:,:,2)) + 0.114 * double(Dis_img(:,:,3));
end

[M,N]=size(Ref_img);
f = max(1,round(min(M,N)/256));
%downsampling by f
%use a simple low-pass filter 
if(f>1)
    lpf = ones(f,f);
    lpf = lpf/sum(lpf(:));
    Ref_img = imfilter(Ref_img,lpf,'symmetric','same');
    Dis_img = imfilter(Dis_img,lpf,'symmetric','same');

    Ref_img = Ref_img(1:f:end,1:f:end);
    Dis_img = Dis_img(1:f:end,1:f:end);
end
[m,n]=size(Ref_img);

% Fractional gradient
[g1]=directional_gradient(Ref_img);
[g2]=directional_gradient(Dis_img);
L=255;
alfa=0.5;
K(1)=10;
C1 = (K(1)*L).^(2*alfa);


grad1=abs(g1(:,:,[1,3])-g1(:,:,[2,4])).^alfa;
grad2=abs(g2(:,:,[1,3])-g2(:,:,[2,4])).^alfa;

[Y X]=meshgrid(1:n,1:m);
[x ind3]=max(grad1,[],3);

ind=sub2ind([m,n,2],X(:),Y(:),ind3(:));
map=(2*grad1(ind).*grad2(ind)+C1)./(grad1(ind).^2+grad2(ind).^2+C1);
ESSIM_index=mean(map(:));

end


function  [g]=directional_gradient(f)


[m,n]=size(f);
g=zeros(m,n,4);

K1=zeros(5);K2=K1; K3=K1; K4=K1;
Kt=1/16*[3 10 3;0 0 0; -3 -10 -3];
K1(2:4,2:4)=Kt;  K2=K1';
K3=1/16*[ 0     0     3     0     0;
    0    10     0     0     0;
    3     0     0     0    -3;
    0     0     0   -10     0;
    0     0    -3     0     0];
K4=rot90(K3);

g(:,:,1)=filter2(K1,f,'same');
g(:,:,2)=filter2(K2,f,'same');
g(:,:,3)=filter2(K3,f,'same');
g(:,:,4)=filter2(K4,f,'same');
end


function d = iou(in1,in2)

% inputs are bounding box vectors   
if (isvector(in1) && numel(in1) == 4) && (isvector(in2) && numel(in2) == 4) 
    intersectionBox = [max(in1(1:2), in2(1:2)), min(in1(3:4), in2(3:4))];
    iw = intersectionBox(3)-intersectionBox(1)+1;
    ih = intersectionBox(4)-intersectionBox(2)+1;
    if iw>0 && ih>0
        % compute overlap as area of intersection / area of union
        unionArea = (in1(3)-in1(1)+1)*(in1(4)-in1(2)+1)+...
                    (in2(3)-in2(1)+1)*(in2(4)-in2(2)+1)- iw*ih;
        d = iw*ih/unionArea;
    else
        d = 0;
    end
% inputs are bounding box matrices
elseif size(in1,2) == 4 && size(in2,2) == 4
    intersectionBox = [max(in1(:,1), in2(:,1)), max(in1(:,2), in2(:,2)),...
                       min(in1(:,3), in2(:,3)), min(in1(:,4), in2(:,4))];
    iw = intersectionBox(:,3)-intersectionBox(:,1)+1;
    ih = intersectionBox(:,4)-intersectionBox(:,2)+1;
    unionArea = bsxfun(@minus, in1(:,3), in1(:,1)-1) .*...
                bsxfun(@minus, in1(:,4), in1(:,2)-1)  +...
                bsxfun(@minus, in2(:,3), in2(:,1)-1) .*...
                bsxfun(@minus, in2(:,4), in2(:,2)-1)  - iw.*ih;    
    d = iw .* ih ./ unionArea;
    d(iw <= 0 | ih <= 0) = 0;
% inputs are binary masks    
elseif ismatrix(in1) && ismatrix(in2) 
    assert(isequal(size(in1),size(in2)),'Masks must have the same dimensions')
    u = nnz(in1 | in2);
    if u > 0
        d = nnz(in1 & in2) / u;
    else
        d = 0;
    end    
else
    error('Input must be two logical masks or two bounding box vector/matrices')
end
end


function NK = NormalizedCrossCorrelation(origImg, distImg)

origImg = double(origImg);
distImg = double(distImg);

NK = sum(sum(origImg .* distImg)) / sum(sum(origImg .* origImg));
end

function s = sobel_enh_conv (image)

m = [-1 -2 -1;0 0 0;1 2 1];
m2 = m';
i = image;

[si1 si2] = size(i);

result = conv2(m,i);
result1 = conv2 (m2,i);

result = result(2:si1+1, 2:si2+1);
result1 = result1(2:si1+1, 2:si2+1);

% SOBEL EDGE DETECTION
result1 = result1.^2;
result = result.^2;
final = result1 + result;
final = final.^(0.5);

s = final;

end

🎉3 参考文献

[1]Katırcıoğlu, F. (2020). Edge detection method based on heat conduction matrix for infrared images. Optical Engineering, 59(9), 093103.

👨‍💻4 Matlab代码实现

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

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

相关文章

3道真题训练|学会链表的前世今生

&#x1f64b;很多朋友都问我学完基础知识以后怎样提高编程水平&#xff1f;当然是刷题啦&#xff01;很多小伙伴都在纠结从哪里开始&#xff0c;今天给大家推荐一个身边朋友都在使用的刷题网站&#xff1a;点击进入牛客网刷题吧&#xff01; &#x1f64b;‍♂️今天是Java …

中文文本分类,基本模型的pytoch实现

学习说明&#xff1a;最近发现了一个宝藏仓库&#xff0c;将常见的文本分类方法做了一个介绍、及封装。现在将学习这仓库的一些笔记记录如下 参照资料 649453932/Chinese-Text-Classification-Pytorch: 中文文本分类&#xff0c;TextCNN&#xff0c;TextRNN&#xff0c;FastT…

宣布 .NET MAUI 支持 .NET 7 Release Candidate 2

支持 .NET 7 Release Candidate 2的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此版本包含在生产中使用的上线支持许可证。 在相关新闻中&#xff0…

Linux 内存node和zone

文章目录前言一、内存模型二、&#xff08;N&#xff09;UMA2.1 简介2.2 节点2.3 UMA节点与Flat Memory Model2.4 zone2.4.1 zone2.4.2 zone_type参考资料前言 一、内存模型 所谓memory model&#xff0c;其实就是从cpu的角度看&#xff0c;其物理内存的分布情况&#xff0c;…

图解操作系统-cpu cache

不同物理器件的访问速度不一&#xff1a;速度快的代价高、容量小&#xff1b;代价低且容量大&#xff0c;速度较慢。 为充分发挥各种器件优点&#xff0c;计算机存储数据的物理器件不会只选择一种&#xff0c;而是以CPU为核心&#xff0c;由内而外地组建一整套存储体系结构。它…

亿可控_第2章_指标数据采集与断连监控

亿可控_第2章_指标数据采集与断连监控 文章目录亿可控_第2章_指标数据采集与断连监控第2章 指标数据采集与断连监控学习目标1. EMQ指标主题订阅1.1 Eclipse paho简介1.2 发送与订阅消息1.2.1 发送消息1.2.2 订阅消息1.3 订阅指标主题1.3.1 需求分析1.3.2 实现思路1.3.3 代码实现…

23模式---单例模式

单例模式&#xff0c;属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例&#xff08;根据需要&#xff0c;也有可能一个线程中属于单例&#xff0c;如&#xff1a;仅线程上下文内使用同一个实例&#xff09; 这个也是23设计模型中最…

Python 图像处理OpenCV:几何变换(笔记)

包括图像缩放、图像平移、图像旋转、图像的仿射变换、图像的透射变换及图像金字塔等内容。 图像缩放&#xff1a; 缩放是对图像的大小进行调整&#xff0c;即使图像放大或缩小。cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)src : 输入图像dsize: 绝对尺寸&a…

Linux运维面试题总结—Linux基础、计算机网络基础

文章目录一、三次握手四次挥手二、如何划分vlan三、为什么划分vlanvlan三个模式&#xff1a;vxlan和vlan区别是什么&#xff1f;四、OSI七层模型及对应协议五、Linux中 查找大于10M的文件并删除六、查看cup占用情况&#xff0c;查看内存&#xff0c;查看磁盘IO使用情况&#xf…

图像处理黑科技——弯曲矫正、去摩尔纹、切边增强、PS检测

目录0 前言1 弯曲矫正2 去摩尔纹3 图像切边增强4 PS检测5 总结0 前言 合合信息是行业领先的人工智能及大数据科技企业&#xff0c;专注文字识别领域16年&#xff0c;在智能文字识别及商业大数据等核心领域处于国内领先地位&#xff0c;全球企业和个人用户提供创新的数字化、智…

代码随想录动态规划——一和零

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 输入&#xff1a;strs [“10…

Oracle Unifier 系统架构简述(安装部署)

关于Oracle Primavera Unifier 的应用架构&#xff0c;其实在我之前的博客已有介绍相关内容 谈谈 Oracle P6 , Unifier 和其他应用系统间的联系https://campin.blog.csdn.net/article/details/104972949 从官方文档方面&#xff0c;其实在《unifier_performance_and_sizing_g…

【C语言】全面解析数据在内存中的存储

文章目录前言类型的基本分类整型浮点数自定义类型整型在内存中的存储原码、反码、补码大端和小端如何判断编译器是大端还是小端浮点数在内存中的存储总结前言 C语言中有char、short、int、long、long long、float和doubole这些数据类型。这些数据类型也叫内置类型。 所占存储空…

JECloud微服务低代码平台重大发布。

JECloud微服务低代码平台【1.0.0】版升级发布&#xff0c;本次发布内容如下&#xff1a; JECloud微服务低代码平台是一款基于元数据领域模型构建的低代码开发平台&#xff0c;其底层采用微服务与微应用构建底层框架&#xff0c;并基于基础框架构建各核心微服务模块来实现低代码…

手撕七大排序 (四)

归并排序归并排序递归写法一. 基本概念二. 图解归并排序递归写法 一. 基本概念 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并…

数据结构与算法——链表(双向链表,顺序表与链表的比较)

&#x1f353;个人主页&#xff1a;bit.. &#x1f352;系列专栏&#xff1a;Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 目录 一.双向链表 二.双向链表的对称性&#xff1a;&#xff08;设指针p指向某一结点&#xff09; 1.双向链表的插入 2.双向链表的删除 …

浏览器中的页面循环系统

【】渲染进程中有个主线程处理安排好的任务&#xff0c;为了在线程运行过程中接收并处理新任务&#xff0c;引入了事件循环机制&#xff1b;为了处理其他线程发送来的任务&#xff0c;引入消息队列&#xff1b;为了处理其他进程发送来的任务&#xff0c;渲染进程专门有一个IO线…

【数据结构初阶】二、顺序表的实现

目录 一、线性表 二、顺序表 2.1 顺序表概念及结构 2.2 顺序表接口实现 2.2.1 顺序表初始化 2.2.2 顺序表的销毁 2.2.3 顺序表的打印 2.2.4 顺序表增加数据&#xff08;插入&#xff0c;头插、尾插&#xff09; 2.2.5 顺序表删除数据&#xff08;删除&#xff0c;头删…

Uniapp集成腾讯IM+音视频通话

腾讯IM(包含界面)源码下载相关配置 传送门&#xff1a;https://cloud.tencent.com/document/product/269/36887 传送门&#xff1a;https://github.com/TencentCloud/TIMSDK/tree/master/uni-app vue2 vue3都可 笔者用的vue2 解压文件 拖到编辑器 #项目右键 在命令行窗口打开 …

Promethues原理详解

目录 引言 一、Prometheus概念 1.1、什么是Prometheus 1.2、Zabbix和Prometheus区别 1.3、Prometheus的特点 二、运维监控平台设计思路 三、Prometheus监控体系 3.1、系统层监控&#xff08;需要监控的数据&#xff09; 3.2、中间件及基础设施类监控 3.3、应用层监控…