- 博客(75)
- 问答 (1)
- 收藏
- 关注
原创 MATLAB GUI中对缩放的图像/图形操作后仍旧刷新回之前的大小
前言遇到了一个问题,对显示的图像进行操作时,需要放大之后再次进行交互式操作,但是刷新的时候由于只是重新显示,又得重新放大,非常麻烦。类似于这个问题:matlab如何图像放大显示,在其上操作然后显示.里面看了,但是不管用,最终受到https://ww2.mathworks.cn/matlabcentral/answers/23318-reset-to-original-view-with-zoom中的解决方案的启发,解决了整个问题。解决方法其实这种放大归根结底是坐标轴的变化,直接在这上面操作就可以。
2021-11-08 10:14:08
1254
原创 matlab中将灰度图像转换为彩色图像
function color_map = gray2color(heat_map)%将灰度图像转换为彩色图像cmap = jet;sz = size(heat_map);color_map = zeros(sz(1), sz(2), 3);for i = 1:256 ind = find(heat_map == i-1); [r,c] = ind2sub(sz, ind); for j = 1:3 color_map(sub2ind([sz(1), sz(
2021-09-16 11:20:02
16242
5
原创 muduo中的日志
日志的各个级别代码分析在logging.h中,声明了一个SourceFile类,这个类的作用就是给定一个字符串,把字符串中文件的文件名(basename)提取出来,就是类似于Python中的
2021-07-12 17:36:53
549
原创 结合muduo中Singleton一探单例模式
前言老样子直接解析代码:template<typename T>struct has_no_destroy{ template <typename C> static char test(decltype(&C::no_destroy)); template <typename C> static int32_t test(...); const static bool value = sizeof(test<T>(0)) == 1
2021-07-08 21:17:02
144
原创 muduo中线程池一探
前言要向高效的实现对逻辑事物的处理,线程池是一个必不可少的东西,根据陈硕老师的思想:线程池作为一种宝贵的资源,数量应适宜,并且固定。Linux下创建线程唯一的一个函数就是pthread_create,创建的同时必须指定一个函数指针以及传入的参数,执行完毕就使用pthread_join函数回收,分配的栈空间被回收,下次只能是一个新的线程,要想不被回收,就只能一直运行这个函数,使用一个容器来将所有的请求存储起来,让这些个线程从容器里取这个请求,一直运行,当然也可以关闭这些线程。那么下面将结合muduo的源码简
2021-07-06 21:45:02
261
1
原创 浅析pthread_cond_wait函数
前言pthread_cond_wait函数是Linux下条件变量的函数之一,这个函数也是其中最为复杂的一个函数,其功能为:只要到这个函数,就发生阻塞,直到使用pthread_cond_signal或者pthread_cond_broadcast给条件变量发送信号,此时该线程才继续运行,其主要用三个功能:阻塞等待条件变量cond释放已掌握的互斥锁(解锁互斥量)相当于ptherad_mutex_unlock(&mutex);1、2两步为一个原子操作当被唤醒,pthread_cond
2021-07-06 17:03:03
6096
10
原创 pthread_atfork函数的使用以及对死锁的解决
pthread_atfork函数函数原型:int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));函数功能简而言之,该函数在调用**fork()**前执行prepare函数,调用fork()后在子进程执行child函数,在父进程执行parent函数,返回0表示函数执行成功。值得注意的是,无论函数定义在哪里,只有在下一个fork()执行前,该函数才被执行。线
2021-07-05 11:27:41
361
原创 手把手教你入门图像分割-基于深度学习
前言下面将逐步为大家介绍一个基于深度学习(U-Net)的图像分割项目Python安装安装Anacondaanaconda是一个集成的环境,内置很多基本的额Python安装包,使用anaconda可大大方便我们创建新的环境,安装删除各种包等。前往https://www.anaconda.com/products/individual 下载,根据个人电脑位数选择安装32位或者64位软件,安装时一直下一步就好,记住安装的路径安装PycharmPyCharm是一个很好的编辑器,前往https://www
2021-05-26 09:48:14
1541
3
原创 C语言中的线性表演示代码
#include<stdio.h>#include<stdlib.h> #include <string.h>#define NofsNumber 10 //学号设置最长为10个字符#define NofName 10 //名字设置最长为10个字符typedef int score_type; //分数的类型默认设置为unsigned char类型[0 , 255]//线性表中每个节点的struct,包含 : 学号、名字、3科成绩加上一个平均成绩typ
2021-05-16 15:45:57
377
原创 ‘Tensor‘ object does not support item assignment解决办法
错误原因tensorflow张量中不允许逐元素的赋值,比如a是一个二维张量,a[1,1] = 0是个不合法的操作。解决方法CSDN上有许多种解决方案,一种是采用中间变量.还有一种可以通过列表和tf.stack函数实现...
2021-04-22 17:23:51
3173
原创 MATLAB训练的模型输出中间层的特征图
前言通常,可视化中间层的特征图有助于增强我们对模型的理解,在MATLAB中使用此功能十分的方便。方法features = activations(network,input ,layer name)调用activations函数即可,三个参数依次为模型的名称,模型的输入,最后一个参数注意是该层的名字。...
2021-04-21 17:06:10
2069
原创 VSCode中使用Remote-SSH连接服务器失败的解决方法
最近使用VSCode远程连接Linux服务器时一直出错,使用PUTTY可以连接上,因此确定不是服务器方面的原因,经过搜索发现:将Remote-SSH的版本降低至0.49后问题即解决。
2021-04-08 17:40:57
4889
转载 DGL使用笔记
DGL一个基于pytorch的图神经网络库使用方法import dglimport torch as thg = dgl.graph(([0, 0, 1, 5], [1, 2, 2, 0])) # 6个节点,4条边上面为创建图的过程,表示节点0->1,0->2,…有一个连接,这里是有向图,通过bg = dgl.to_bidirected(g)可将有向图直接转换为无向图,默认是64位整数,通过edges = th.tensor([2, 5, 3]), th.tensor([3
2021-03-29 10:55:17
671
原创 STL之tuple
前言std::tuple 是一个固定尺寸随意类型的元素集合,其基本的使用方法为:std::tuple<int, int, string, string> t(1,2,"abc","bcd");auto t2 = make_tuple(1,2,"ac","ab");取元素的操作为:get<0>(t)//取第0个元素get<1>(t)//取第1个元素源码分析std::tuple中使用的是C++ 2.0中可变模板参数技术,并且结合的是罕见的私有继承方式,这
2021-02-03 18:41:41
599
原创 MATLAB中物体夹角的检测
前言实验中经常需要测量一个物体的角度变化,如果开发一个图像处理的方法可以大大节省我们的时间,这次我们使用霍夫变换等进行物体夹角的预测。任务图像如下图所示我们需要检测的夹角示意图为:因此整个任务可以分解成两个子任务:检测红边的直线检测绿边的直线之后通过两条直线的k就可以算出夹角,由于实验中红边的位置几乎固定,根据绿边k的符号就可以判断夹角是锐角还是钝角。检测红边很明显,红边所在的位置即为交界处,可以使用边缘检测算子,但是实际的环境很难排除噪声,因此我们这里使用基于颜色的聚类方式首先
2021-02-02 12:14:21
4072
4
原创 tensorflow.keras.metrics.AUC()使用过程中名字发生改变
问题在使用交叉验证的时候,由于每一折都重新加载一个模型训练,跑完一折后发现保存模型的监测器变成诸如auc_1,auc_2等,这就意味着之前的设置全部无效,白白浪费时间。解决办法将tensorflow.keras.metrics.AUC()中的name关键字参数值设置为’auc’,即为tensorflow.keras.metrics.AUC(name = 'auc')参考https://stackoverflow.com/questions/62408749/how-to-reset-keras
2021-01-12 10:04:41
1813
原创 MATLAB中使用HSV阈值分割交通标志
前言通常,我们会根据颜色的不同分割不同的目标,例如我们日常生活中经常看到的交通标志,一个很直观的想法就是将颜色从RGB空间转换到HSV空间,根据色调(H)或者饱和度分割不同的目标,下面就是这样一个例子;代码%%clc;clear;close all%%img = imread('test3.jpg');imgHSV = rgb2hsv(img);imgt = imgHSV(:,:,2);%首先进行饱和度筛选(0到1之间),越大说明选择条件越严格BW = imgt>0.8;CC =
2021-01-02 22:56:12
3137
原创 C++学习笔记
基本知识前缀/后缀自增运算符前缀或者后缀自增(同自减)运算的区别就是先对该变量操作还是先对表达式操作。比如:#include<iostream>using namespace std;int main(){ int a = 2,b=3; //先对a自增然后运算该表达式 cout<<++a+b<<" "; //先运算该表达式然后对b自增 cout<<a+b++<<" "; cout<<a<<
2020-12-24 10:59:01
113
原创 MATLAB中图像标注工具——Image Labeler的使用方法
前言深度学习中无论是什么任务,数据集是必不可少的,我们可以使用公开数据集,但实际情况中由于特定的任务我们可能也不得不手动制作数据集。正好本人最近在一个语义分割任务中涉及自己制作数据集,也就是标注图像,虽然有例如labelme、ITKsnap等软件可以用来标注,但MATLAB也提供了一个非常实用的图像标注工具Image Labeler,可以在APP中找到,可以用来标记矩形感兴趣区域 (ROI) 标签、折线 ROI 标签、像素 ROI 标签和场景标签。语义分割任务中用到的是像素ROI标注功能,因此在本篇博客中
2020-12-16 19:27:13
21118
23
原创 MATLAB中将两次分割结果合并在一起
前言通常我们会获得在不同方法下的分割结果,如果获得的是概率图,我们可以取平均值然后根据阈值或者argmax确定最终的类别,但是如果我们仅仅想把两次分割的结果合并,并填充空洞,下面就是具体的代码:代码以下代码只适用于两类分割结果的合并path1 = 'E:\S1';path2 ='E:\S2';save_path = 'E:\S3';fnames = dir(fullfile(path1,'*.png'));for i = 1:numel(fnames) img1 = imread(f
2020-12-09 18:00:18
1144
原创 matlab边缘检测区域生长和分水岭的代码示例
代码详细说明见注释,图片使用的是matlab内置的图像,直接可以运行% Methods of edge detection:LoG and cannyclc;clear;close all%Read imageimg = imread('cameraman.tif');edge_log = edge(img,'log');edge_canny= edge(img,'canny');%watershed%Filter the image, you can alse annotate this
2020-12-05 21:24:46
867
原创 MATLAB中将分割结果保存为单通道彩色的图像
前言可能标题有点歧义,既然是彩色图像,怎么可能是单通道的呢?其实一想就容易理解,实质上就是索引图像。为了后续处理方便,在多类目标的掩膜图像中,灰度值经常设置为0,1,2,3…,分割的结果不经过灰度拉伸根本看不出来长什么样子,将灰度值拉伸后又害怕后续处理麻烦,因此便想出来,直接将图像存储成彩色索引图像就行。代码在这里插入代码片...
2020-12-01 21:22:08
1061
原创 kaggle中使用低版本的tensorflow时GPU占用率很低
前言本人也是kaggle新手,在使用kaggle中的notebook运行本地训练好的模型作推理时,即使使用了GPU,速度依然很慢,并且可以看到GPU的占用率为0,经过多方得知在kaggle中只有最新版本的tensorflow才能使用GPU,这个版本也是kaggle镜像内置的版本,个人当然可以指定老一点的版本,直接运行!pip install tensorflow==xxx即可,但是这样用不了GPU,没办法,只能使用新版本的tensorflow重新训练模型了。参考https://www.kagg
2020-11-25 10:54:22
2517
8
原创 MATLAB中滤波演示
MATLAB中使用均值、中值、prewitt滤波器的几个例子clc;clear; close all%% 盒式滤波器img = imread('lena256.bmp');%图像读取img = rgb2gray(img);%转换为灰度图h1 = fspecial('average',3); %3×3卷积核img_filted1 = imfilter(img,h1);h2 = fspecial('average',11); %11×11卷积核img_filted2= imfilter(img,
2020-11-24 13:54:45
645
原创 C++中按名次排序的两个实现方式
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入#include<iostream>#include<vector>#include<al
2020-11-08 10:18:41
2261
原创 Python下遍历一个文件夹下指定类型的文件
前言经常遇到对文件夹下指定类型的文件进行处理的操作,如果仅是一层目录,尚且好说,对于多级子目录,我们只能采用文件遍历的处理。代码在下面的代码中,执行的是删除’H:\Experimen’下所有img文件path = 'H:\Experimen\'for root, dirs, files in os.walk(path): for file in files: if file[-3:] == 'img': os.remove(os.path.join(root, file))..
2020-10-21 17:04:22
1718
2
原创 MATLAB中绘制ROC曲线
我们通常使用ROC曲线来评价分类结果的好坏,在MATLAB中绘制该曲线其实也十分容易。我们让label表示真实的类别,output表示预测的类别,那么调用:[XRF,YRF,TRF,AUCRF] = perfcurve(label,output,1);之后运行:plot(XRF,YRF)即可得到ROC曲线,该函数中还有一个参数,也就是正类的标签(positive class label),该变量是一个常数,可以为数值,也可是是字符串等,需要指定一下。上面的例子中,我们输出的结果和标签都是0或1的
2020-10-10 20:17:20
5093
7
原创 opencv 中无法打开文件“opencv_world401d.lib”
VS2017+OpenCV4.1.1配置指南强烈推荐https://blog.csdn.net/weixin_43042467/article/details/105240489?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242.关于错误网络上有两种解决方法,一个是删除这个链接库,肯定不行,万一用到怎么办;第二个:再添加一个opencv_world401.lib,作用不大,报错的信息
2020-10-08 22:34:24
1591
2
原创 MATLAB中图像之间的Mutual information的计算
Mutual information图像中Mutual information的计算公式一般如下:这之中涉及到两个方面的内容,一个是联合的直方图,一个是各自的直方图。下面是参考代码:function res = computeMI(img1,img2,bins)%Compute mutual information%Quantify imagesimg1 = im2double(uint16(img1));img2 = im2double(uint16(img2));img1 = floo
2020-10-06 22:32:21
1762
2
原创 C++中this指针用作链式编程的实践
前言在学习黑马程序C++教程时,看到第115集https://www.bilibili.com/video/BV1et411b73Z?p=115.时,听到this指针用作链式编程的例子,返回形式是引用形式还是值形式对结果有很大的影响,结合自己的理解和编程结果一探究竟。代码实践#include<iostream>#include<string>#include<vector>#include<new>using namespace std;
2020-09-21 00:17:16
455
原创 MATLAB中提取二值图像的边缘
前言图像处理中,经常会遇到提取图像边缘的问题,实现也不难,一般的,如果仅为可视化,可以直接通过形态学膨胀减去之前的图像获得,但这样难以提取到具体的坐标,也会使图像边缘太“厚”。其实MATLAB中内置的函数 bwboundaries就可以实现这个功能。用法示例bound = bwboundaries(BW);%提取边缘for k = 1:numel(bound) boundary = bound{k}; plot(boundary(:,2), boundary(:,1),'LineW
2020-09-20 21:34:50
5098
空空如也
麻烦一下各位大佬们,为什么我写的C++程序将彩色图转换成灰度图后,新创建的图像显示不出来
2017-09-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人