matlab图像处理

1.图片的读取(下左)

I=imread('可爱猫咪.jpg');%图像读取,这里''内为'路径\名称',如:'E:\examples\可爱猫咪.jpg'
figure,imshow(I);%图像显示
title('原图')

 

2.转为灰度图像(上右)

I_gray=rgb2gray(I);
figure,imshow(I_gray);
title('灰度图像')

查看是否是灰度图像的一个方法:

disp('输出字符串')%输出字符串;

ndims()%输出矩阵维度,这里灰度图像或二值图像矩阵维度都为2,彩色图像为3。所以无法判断是灰度图像还是二值图像。之前matlab有函数isgray(),现在被移除了,就用如下办法将就吧。

imwrite(I,'I_gray.jpg')%将I保存为名为I_gray的.jpg图像.

if(ndims(I)==2)
    disp('是灰度图');
    imwrite(I,'I_gray.jpg')
else 
    disp('不是灰度图')
    Ig=rgb2gray(I);%转为灰度图Ig
    imwrite(Ig,'I_gray.jpg')
end

 3.线性扩展

a=0.6;
b=1;
c=0.5;
d=0.8; 
J=imadjust(I,[a;b],[c;d]);
subplot(1,2,1);%画布1行2列,放在第一个
imshow(J);
title('线性扩展');

4.非线性扩展

C=1.5;
K=C*log(1+((double(I))/255));%图像归一化处理
subplot(1,2,2);%画布1行2列,放在第二个
imshow(K);
title('非线性扩展');

 5.二值化

N1=im2bw(I,0.4);
N2=im2bw(I,0.7);
subplot(1,2,1);
imshow(N1);
subplot(1,2,2);
imshow(N2);

6.缩放

a=imresize(I,1.5);%按比例放大到1.5倍
b=imresize(I,[420,384]);%非比例
c=imresize(I,0.7);%按比例缩小到0.7倍
d=imresize(I,[150,80]);
subplot(2,2,1);
imshow(a);
title('a');
subplot(2,2,2);
imshow(b);
title('b');
subplot(2,2,3);
imshow(c);
title('c');
subplot(2,2,4);
imshow(d);
title('d');

 (噢,猫猫~)

 7.旋转

K=imrotate(I,45);
subplot(1,2,1);
imshow(K);
title('旋转45度');
L=imrotate(I,180);
subplot(1,2,2);
imshow(L);
title('旋转180度');

 8.线检测

此处代码为检测水平方向的线,可根据注释模板替换检测垂直等方向的线


I=im2bw(I,0.7);%此处应先将图像二值化或转为灰度图像

w=[-1 -1 -1; 2 2 2; -1 -1 -1];%水平
% w=[-1 -1 2; -1 2 -1; 2 -1 -1];%垂直
% w=[-1 2 -1; -1 2 -1; -1 2 -1];%45度
% w=[2 -1 -1; -1 2 -1; -1 -1 2];%-45度

g=imfilter(double(I), w);
figure,subplot(2,3,1);
imshow(g,{})  % 滤波后图像
title('水平-滤波')

g=abs(g);
subplot(2,3,2);
imshow(g,{})
title('g=abs(g)')

T=max(g(:));
g=g>=T;
subplot(2,3,3);
imshow(g)
title('阈值为T')

T=(1/3)*max(g(:));
g=g>=T;
subplot(2,3,4);
imshow(g)
title('阈值为1/3最大值')

T=(2/3)*max(g(:));
g=g>=T;
subplot(2,3,5);
imshow(g)
title('阈值为2/3最大值')

掩模例:

9.边缘检测

        edge()函数

        如:BW = edge(I,'prewitt',THRESH,DIRECTION) 表示对图像I,用prewitt方法;

        THRESH:规定了普鲁伊特prewitt方法的灵敏度阈值。边缘忽略所有不强于THRESH的边缘。如果你没有指定THRESH,或者THRESH为空, edge 会自动选择这个值。

         DIRECTION:寻找 "水平horizontal "或 "垂直 vertical"边缘,或 "两者"(默认)。

测试三种method,Canny,Prewitt,Sobel

I_gray=rgb2gray(I);%此处应先将图像二值化或转为灰度图像
a=edge(I_gray,'Canny');
b= edge(I_gray,'Prewitt');
c=edge(I_gray,'Sobel');
subplot(1,3,1);
imshow(a);
title('Canny');
subplot(1,3,2);
imshow(b);
title('Prewitt');

subplot(1,3,3);
imshow(c);

title('Sobel');

测试不同方向和不同阈值:


A=edge(I_gray,'Prewitt',0.02,'horizontal');
B=edge(I_gray,'Prewitt',0.15,'horizontal');
C=edge(I_gray,'Prewitt',0.02,'vertical');
D=edge(I_gray,'Prewitt',0.1,'vertical');
subplot(2,2,1);
imshow(A);
subplot(2,2,2);
imshow(B);
subplot(2,2,3);
imshow(C);
subplot(2,2,4);
imshow(D);

10.归一化直方图和累积直方图

I=imread('可爱猫咪.jpg');
set(gcf, 'Position', [20 70 900 600], 'color','y'); 
subplot(1,3,1),imshow(I),title('原图')
N=50;
Hist_image=imhist(img_gray,N); % 计算直方图
Hist_image=Hist_image/sum(Hist_image); % 计算归一化直方图
Hist_image_cumulation=cumsum(Hist_image); % 计算累计直方图
subplot(1,3,2),stem(0:N-1,Hist_image),title('直方图')
subplot(1,4,3),stem(0:N-1,Hist_image_cumulation),title('累计直方图')

这里为二次编辑,将图片裁剪为方形了。

set(gcf, 'Position', [20 70 900 600], 'color','y'); 

设置了figure位置:起始坐标为(20 ,70 ),宽度900,高度600像素。'color','y' 设置了图片背景为黄色 ,默认白色。('r'是红色,'b'是蓝色,'w'白色)

11. 直方图的均衡化

I=imread('可爱猫咪.jpg');
I_gray=rgb2gray(I);
subplot(2,4,1),imshow(I_gray),title('原始图像')
subplot(2,4,5),imhist(I_gray),title('原图像直方图')
N=30;
g=histeq(I_gray,N); % histeq 均衡化函数
subplot(2,4,2),imshow(g),title('直方图均衡后图像(N=30)')
subplot(2,4,6),imhist(g),title('均衡化后直方图(N=30)')
N=256;
g=histeq(I_gray,N); % histeq 均衡化函数
subplot(2,4,3),imshow(g),title('直方图均衡后图像(N=256)')
subplot(2,4,7),imhist(g),title('均衡化后直方图(N=256)')
N=2048;
g=histeq(I_gray,N); % histeq 均衡化函数
subplot(2,4,4),imshow(g),title('直方图均衡后图像(N=2048)')
subplot(2,4,8),imhist(g),title('均衡化后直方图(N=2048)')

12规定化直方图

I=imread('可爱猫咪.jpg');
I_gray=rgb2gray(I);
subplot(3,3,1),imshow(I_gray),title('原始图像')
subplot(3,3,7),imhist(I_gray),title('原图像直方图')
%幂函数变换直方图
Index=0:N-1;
Hist{1}=exp(-(Index-15).^2/8);  % 4
Hist{1}=Hist{1}/sum(Hist{1});
Hist_cumulation{1}=cumsum(Hist{1});
subplot(3,3,5),stem(0:N-1,Hist{1}),title('幂函数变换直方图')
% log函数直方图
Index=0:N-1;
Hist{2}=log(Index+20)/60;  % 15
Hist{2}=Hist{2}/sum(Hist{2});
Hist_cumulation{2}=cumsum(Hist{2});
subplot(3,3,6),stem(0:N-1,Hist{2}),title('log函数变换直方图')
 
% 规定化处理
for m=1:2
    Image=I_gray;
    for k=1:N
        Temp=abs(Hist_image_cumulation(k)-Hist_cumulation{m});
        [Temp1, Project{m}(k)]=min(Temp);
    end
    % 变换后直方图
    for k=1:N
        Temp=find(Project{m}==k); 
        if isempty(Temp)
            Hist_result{m}(k)=0;
        else
            Hist_result{m}(k)=sum(Hist_image(Temp));
        end
    end
    subplot(3,3,m+7),stem(0:N-1,Hist_result{m}),title('变换后直方图')
    % 结果图
    Step=256/N;
    for k=1:N
        Index=find(I_gray>=Step*(k-1)&I_gray<Step*k);
        Image(Index)=Project{m}(k); 
    end
    subplot(3,3,m+1),imshow(Image,[]),title('变换后图像')
end

持续更新......

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL主从搭建,实现读写分离(基于docker)

一 主从配置原理 mysql主从配置的流程大体如图&#xff1a; 1&#xff09;master会将变动记录到二进制日志里面&#xff1b; 2&#xff09;master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把master发送的二进制写入到relay日志里面&#xff1b; 4&#xf…

【逗老师的无线电】Debian Linux手工编译安装MMDVM

看我干了啥&#xff0c;在Vmware里面装了一个Debian Linux并且运行了MMDVMHost&#xff0c;来支持业余无线电通联 开始之前先举个手&#xff0c;有多少朋友能分清MMDVM和Pi-Star关系的&#xff1f; MMDVM、Pi-Star和树莓派的关系 咱们先科普一下这个小知识点。各位HAM们应…

【Head First 设计模式】-- 策略模式

一、背景 Head First 设计模式第一章设计模式入门–策略模式 二、工具箱的工具&#xff08;本章&#xff09; 1、OO基础 封装 继承 多态 抽象 2、OO原则 封装变化 面向接口编程&#xff0c;而非面向实现编程 组合优于继承 3、OO模式 策略模式&#xff0c;所谓策略模式就是定义…

操作系统:文件管理(二)文件系统

一战成硕 4.3 文件系统4.3.1 文件系统结构4.3.2 文件系统布局4.3.3 外存空闲空间管理4.3.4 虚拟文件系统 4.3 文件系统 4.3.1 文件系统结构 4.3.2 文件系统布局 文件系统在磁盘中的结构 文件系统在内存中的结构 内存中的信息用于管理文件系统并通过缓存提高性能&#xff0c;这…

【JavaEE】JVM 剖析

JVM 1. JVM 的内存划分2. JVM 类加载机制2.1 类加载的大致流程2.2 双亲委派模型2.3 类加载的时机 3. 垃圾回收机制3.1 为什么会存在垃圾回收机制?3.2 垃圾回收, 到底实在做什么?3.3 垃圾回收的两步骤第一步: 判断对象是否是"垃圾"第二步: 如何回收垃圾 1. JVM 的内…

数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

很多时候&#xff0c;看一些数据领域的文章&#xff0c;说到为什么做数据仓库、数据仓库要分层&#xff0c;我们经常会看到一些结论&#xff1a;因为有ABCD…等等理由&#xff0c;比如降低开发成本、减少重复计算等等好处 然后&#xff0c;多数人就记住了ABCD。但是&#xff0…

python3 阿里云api进行巡检发送邮件

python3 脚本爬取阿里云进行巡检 不确定pip能不能安装上&#xff0c;使用时候可以百度一下&#xff0c;脚本是可以使用的&#xff0c;没有问题的 太长时间了&#xff0c;pip安装依赖忘记那些了&#xff0c;使用科大星火询问了下&#xff0c;给了下面的&#xff0c;看看能不能使…

知识注入以对抗大型语言模型(LLM)的幻觉11.6

知识注入以对抗大型语言模型&#xff08;LLM&#xff09;的幻觉 摘要1 引言2 问题设置和实验2.1 幻觉2.2 生成响应质量 3 结果和讨论3.1 幻觉3.2 生成响应质量 4 结论和未来工作 摘要 大型语言模型&#xff08;LLM&#xff09;内容生成的一个缺点是产生幻觉&#xff0c;即在输…

WPF中的Binding的常见知识点与技巧

完全来源于十月的寒流&#xff0c;感谢大佬讲解 在XAML中&#xff0c;可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性&#xff1a; 属性&#xff1a;可以绑定到对象的属性&#xff0c;例如控件的Text、Visibility、IsEnabled等属性。 集合&am…

linux内的循环

格式 while 【 条件判断 】 do 语句体 done 上图 第一次代码&#xff0c;输入语句在外面&#xff0c;结果输入完&#xff08;非hello&#xff09;程序不断循环&#xff0c;没办法&#xff0c;ctrlc给程序终止了&#xff0c;然后把用户输入的语句放到了循环体里面…

vivo发布“蓝心千询”自然语言对话机器人

&#x1f989; AI新闻 &#x1f680; vivo发布“蓝心千询”自然语言对话机器人 摘要&#xff1a;vivo今日发布了“蓝心千询”自然语言对话机器人&#xff0c;基于蓝心大模型。蓝心千询可以进行知识信息的快速问答&#xff0c;文学创作、图片生成&#xff0c;甚至还能编写程序…

SAM 微调在医学上的尝试

1、2023下半年 1、 UNet与SAM结合的正确的道路SAMUS,一路SOTA没对手&#xff01; https://github.com/xianlin7/SAMUS 2、 本文提出 SonoSAM&#xff1a;一种用于分割超声图像上感兴趣对象的快速基础模型。 https://zhuanlan.zhihu.com/p/663988684 未开源 绿色是预测的&…

流媒体服务实现H5实时预览视频

目录 背景方案业务实践细节注意 待办 背景 客户aws服务磁盘存储告急&#xff0c;最高可扩容16T。排查如下&#xff1a;主要是视频文件存在大量复制使用的情况。例如发布节目时复制、预览时复制&#xff0c;这样上传一份视频后最大会有四份拷贝&#xff08;预览、普通发布、互动…

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流&#xff0c;需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢&#xff1f;他们具体的使用场…

作用域,基本数据类型(常量const),转义字符,运算符

1.作用域 全局作用域&#xff1a;定义在所有花括号外的名字具有“全局作用域” 块作用域&#xff1a;在某个花括号内定义的名字具有“块作用域” 一般把具有全局作用域的变量叫做“全局变量”&#xff0c;具有块作用域的变量叫做“局部变量” 如果在嵌套作用域里出现重名&a…

Linux进程的优先级

Linux进程的优先级 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解Linux中进程的优先级&#xff0…

视频集中存储/云存储EasyCVR启动后查询端口是否被占用出错,该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项

介绍linq to sql 的 DataContext类DeferredLoadingEnabled属性使用,以及DataLoadOptions限定加载相关表数据的LoadWith和AssociateWith方法。 本文中举例用到的数据模型如下: Student和Class之间是多对一关系,Student和Course之间是多对多关系。 DataContext的DeferredLo…

策略模式在数据接收和发送场景的应用

在本篇文章中&#xff0c;我们介绍了策略模式&#xff0c;并在数据接收和发送场景中使用了策略模式。 背景 在最近项目中&#xff0c;需要与外部系统进行数据交互&#xff0c;刚开始交互的系统较为单一&#xff0c;刚开始设计方案时打算使用了if else 进行判断&#xff1a; if(…

宝塔面板使用Supervisor进程守护插件,配置守护Mysql的操作教程。

本篇文章主要讲解&#xff0c;在宝塔面板中使用Supervisor进程守护插件&#xff0c;配置守护Mysql的操作教程。 作者&#xff1a;任聪聪 日期&#xff1a;2023年11月5日 一、安装守护进程插件 安装插件一、进程守护插件 安装说明&#xff1a;在软件商店中搜索“进程守护”&am…