提取图像中的曲线并用于计算(MATLAB)

这篇具有很好参考价值的文章主要介绍了提取图像中的曲线并用于计算(MATLAB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的

应小姐姐所邀
原因是小姐姐拿到供应商的一张图表,但是没有具体的数值,更糟糕的是她还想对图中的几条曲线求和。。。。
在这个提供了一种使用matlab提取曲线的方式;

思路

1、首先根据图表颜色筛选出曲线的像素点坐标(彩色图像)
2、根据图像的像素和实际标注额尺寸进行坐标变换;
3、将较宽的曲线求均值(将曲线做细)
4、补充曲线被打断或者遮挡的部分(差值);
5、最后进行更复杂的运算,这里只做了求和。

图是这样的
图像曲线提取,matlab,matlab,图像处理,计算机视觉
提取到的图是这样的
图像曲线提取,matlab,matlab,图像处理,计算机视觉

最终效果是这样的(因为后面的曲线完全重合了,可以直接幅值就行,这里没有处理,后面有机会再加吧。。。)
图像曲线提取,matlab,matlab,图像处理,计算机视觉
程序如下文章来源地址https://www.toymoban.com/news/detail-543577.html

clc;clear;
close all;

% 读图
pic = imread("pic.jpg");
[m,n,p] = size(pic);
figure,imshow(pic);

imgr = pic(:,:,1);
imgg = pic(:,:,2);
imgb = pic(:,:,3);

% 图表的起始和终止像素
xsta = 22;
ysta = 65;
xsto = 368;
ysto = 768;

% 图表的像素比例
rangex = 1/(xsto-xsta);
rangey = 700/(ysto-ysta);

indexr = [];
indexg = [];
indexb = [];

cntr = 0;
cntg = 0;
cntb = 0;

% 按照颜色提取像素点
for num1 = xsta:xsto
    for num2 = ysta:ysto
        if imgr(num1,num2)<100 && imgg(num1,num2)<100
            mid = [num1,num2];
            indexb = [indexb;mid];
            cntb = cntb+1;
        end
        if imgb(num1,num2)<100 && imgg(num1,num2)<100
            mid = [num1,num2];
            indexr = [indexr;mid];
            cntr = cntr+1;
        end
        if imgb(num1,num2)<100 && imgr(num1,num2)<100
            mid = [num1,num2];
            indexg = [indexg;mid];
            cntr = cntr+1;
        end

    end
end

% 变换坐标,使横纵坐标对称
value.bx = (indexb(:,2)-ysta)*rangey+300;
value.by = abs((indexb(:,1)-xsta)*rangex-1);
value.rx = (indexr(:,2)-ysta)*rangey+300;
value.ry = abs((indexr(:,1)-xsta)*rangex-1);
value.gx = (indexg(:,2)-ysta)*rangey+300;
value.gy = abs((indexg(:,1)-xsta)*rangex-1);

figure,plot(value.bx,value.by,'b.');
hold on,plot(value.rx,value.ry,'r.');
plot(value.gx,value.gy,'g.');


% 由于线条较粗,单个数值占用了好几个像素,所以需要将曲线细化(这里取的像素点均值)
sta = 350;
sto = 800;
ave.bx = [];
ave.by = [];
ave.gx = [];
ave.gy = [];
ave.rx = [];
ave.ry = [];
for cir = sta:sto
    posr = find(round(value.rx) == cir);
     if isempty(posr)
         continue;
     else
         ave.rx = [ave.rx cir];
         ave.ry = [ave.ry mean(value.ry(posr))];
     end

     posg = find(round(value.gx) == cir);
     if isempty(posg)
         continue;
     else
         ave.gx = [ave.gx cir];
         ave.gy = [ave.gy mean(value.gy(posg))];
     end    

    posb = find(round(value.bx) == cir);
     if isempty(posb)
         continue;
     else
         ave.bx = [ave.bx cir];
         ave.by = [ave.by mean(value.by(posb))];
     end     
end

strangePoint = find(ave.gx == 383);
ave.gy(strangePoint) = (ave.gy(strangePoint-1)+ave.gy(strangePoint+1))/2;
figure,plot(ave.bx,ave.by,'b',ave.gx,ave.gy,'g',ave.rx,ave.ry,'r');


% 蓝色和绿色曲线有被红色曲线切断的地方,这里做了差值补齐缺失点,便于后续对应不同横坐标对齐,然后求和
wl = sta:1:sto;
rline = interp1(ave.rx,ave.ry,wl);
gline = interp1(ave.gx,ave.gy,wl);
bline = interp1(ave.bx,ave.by,wl);
figure,subplot(2,1,1),plot(wl,rline,'r',wl,gline,'g',wl,bline,'b');
title('提取的三条曲线');
subplot(2,1,2),plot(wl,rline+gline+bline,'k');
title('求和后的曲线');

到了这里,关于提取图像中的曲线并用于计算(MATLAB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【matlab图像处理】图像直方图操作和matlab画图

    中国史之【平王东迁】: 公元前771年,因镐京曾遭地震,残破不堪,又接近戎、狄等外患威胁,周平王遂在郑、秦、晋等诸侯的护卫下,将国都东迁至洛邑,东周历史由此开始。 ——来源:全历史APP 【路漫漫其修远兮,吾将上下而求索】 今天介绍图像的直方图操作以及用

    2024年02月04日
    浏览(42)
  • 【matlab 图像处理】图像锐化

    对人眼视觉系统的研究表明,人类对形状的感知一般通过识别边缘、轮廓、前景和背景而形成。在图像处理中,边缘信息也十分重要。边缘是图像中亮度突变的区域,通过计算局部图像区域的亮度差异,从而检测出不同目标或场景各部分之间的边界,是图像锐化,图像分割、区域形状

    2024年02月05日
    浏览(39)
  • 用于智能图像处理的计算机视觉和 NLP

    莫斯科,神秘之城...(这张照片由伊戈尔·沙巴林提供)         如今,每个拥有智能手机的人都可能成为摄影师。因此,每天都有大量新照片出现在社交媒体、网站、博客和个人照片库中。尽管拍照的过程可能非常令人兴奋,但将它们整理出来并在之后手动为每个进行描

    2024年02月12日
    浏览(43)
  • 数字图像处理-matlab图像内插

    目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值 参考博客 假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片,右边该为多少? 最近邻插值法坐标变换计算公式: s r c X = d s t X ∗ ( s r c W i d t h / d s t W i d t h ) srcX=dstX*(srcWidth/dstWidth) src X = d s tX ∗

    2024年02月03日
    浏览(56)
  • 计算机图像处理—HOG 特征提取算法

    1. 实验内容 本实验将学习HOG 特征提取算法。 2. 实验要点 HOG 算法 HOG 算法有效的原因 创建 HOG 描述符 HOG 描述符中的元素数量 可视化 HOG 描述符 理解直方图 3. 实验环境 Python 3.6.6 numpy matplotlib cv2 copy 简介 正如在 ORB 算法中看到的,我们可以使用图像中的关键点进行匹配,以检

    2024年02月09日
    浏览(51)
  • 如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)

    在 MATLAB 中进行图像分割有多种方法,下面介绍一些常用的方法: 基于阈值的二值化分割 这是一种最简单的分割方法,将图像分为两个部分:背景和前景。其主要思想是,选择一个阈值,将图像中的像素值与阈值进行比较,将像素值大于阈值的像素标记为前景(白色),将像

    2024年02月12日
    浏览(41)
  • matlab数字图像处理之图像增强

    图像处理 基本目的之一是改善图像质量,而改善图像最常用的技术是图像增强的目的是为了改善图像的视觉效果,使图像更加清晰,便于人和计算机对图像进一步的分析和处理 图像质量 的基本含义是指人们对一幅图像视觉感受的评价。图像增强的目的就是为了改善图像显示

    2024年02月04日
    浏览(54)
  • MATLAB图像处理学习——图像类型的转换

    目录 1.常用的图像类型转换函数 2.实例说明  (1)RGB图像转换为灰度图像  (2)RGB图像转换为索引图像  (3)灰度图像转换为索引图像  (4)索引图像转换为灰度图像  (5)索引图像转换为RGB图像  (6)二值图像的转换  (7)数值矩阵转换为灰度图像 函数名 函数功能

    2024年02月04日
    浏览(45)
  • 数字图像处理 关于matlab的图像变换

    熟悉及掌握图像的傅里叶变换、离散余弦变化原理及性质,实现图像的频率域变换。 1. 读入一幅图像,分别为图像添加叠加密度为0.04的椒盐噪声,均值为0方差为0.02的高斯噪声,做FFT变换。将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出

    2024年02月05日
    浏览(49)
  • Matlab图像处理基础(1):图像表示,点处理

    目录 0. 概要 1. 图像表示 Image Representation 1.1 图像格式 Image format 1.2 图像分辨率 resolution of image 1.3 图像的编码 1.4 Matlab图像加载、显示和保存  1.5 Image Information 1.6 图像格式转换 1.7 其它类型的像素 1.8 像素数值格式 1.9 图像数据的访问和引用 3. 点处理 Point Processing 3.1 关于像

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包