Loading [MathJax]/jax/output/HTML-CSS/jax.js

Discuz! Board

用户名  找回密码
 立即注册
帖子
热搜: 活动 交友 discuz
查看: 1912|回复: 6

matlab公式识别程序运行问题

[复制链接]

5

主题

13

帖子

103

积分

注册会员

Rank: 2

积分
103
发表于 2022-11-3 10:26:34 | 显示全部楼层 |阅读模式
图片库已经上传,但是每次运行就会跳到imread.m函数,第40行截止

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

5

主题

13

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2022-11-3 10:33:02 | 显示全部楼层
运行到此处,再次步进就会出现error

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

392

主题

1225

帖子

3913

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3913
发表于 2022-11-3 10:47:38 | 显示全部楼层
提示getMatLib中的imread无法识别文件格式,imread([name_lib,'.png'])这句话的意思是要求文件的格式是png,确认下格式有没有问题
回复

举报

392

主题

1225

帖子

3913

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3913
发表于 2022-11-3 23:40:34 | 显示全部楼层
试试这个代码
  1. function untited1()
  2. clc;
  3. I=imread('gongshi.png');%璇诲彇鍥剧墖
  4. subplot(3,3,1);imshow(I);
  5. I_gray = rgb2gray(I);
  6. subplot(3,3,2);imshow(I_gray);
  7. I_bw = I_gray<150;
  8. subplot(3,3,3);imshow(I_bw);
  9. [m,n]= size(I_bw);
  10. result = {I_bw};%
  11. direction=0;
  12. flag_cut = 1;
  13. name_lib = {'x','y','z','=','1','2','3','divide','+'};
  14. mat_lib = getMatLib(name_lib);
  15. while flag_cut
  16.     flag_cut = 0;
  17.     n_result = length(result);
  18.     for i_result = 1:n_result
  19.         if length(result{i_result})>10%如果长度大于10,认为是图片,而不是字符串
  20.             result0 = cut_ex(result{i_result},direction);
  21.             %判断上下标
  22.             if direction ==0
  23.                    position =[];
  24.                    for i=1:length(result0)
  25.                        [height,center] = getHeightAndCenter(result0{i});
  26.                        position=[position;height,center];
  27.                    end
  28.                    center_average=mean(position(:,2));
  29.                    shift = (position(:,2)-center_average)/center_average;
  30.                    index_upper = shift<-0.3;
  31.             end
  32.             direction = 1-direction;
  33.             i = 1;
  34.             while  i <= length(result0)
  35.                 I_trim = trim(result0{i});               
  36.                 pos = recognize(mat_lib,name_lib,I_trim)
  37.                
  38.                 %如果上标的话就加个.^符号比如 x2变成 x.^2
  39.                 if index_upper(i) == 1
  40.                     result0 ={ result0{1:i-1},'.^', result0{i:end}};
  41.                     index_upper=[index_upper(1:i-1);0;index_upper(i:end)];
  42.                     i = i+1;
  43.                 end
  44.                
  45.                 %尝试识别
  46.                 if pos>0%如果识别出来,直接把图像矩阵换为识别结果字符
  47.                       result0{i} = name_lib{pos};
  48.                       i = i+1;
  49.                 else%否则更换切割方向,并且用括号把未识别部分括起来
  50.                     %如果不加括号,y=1/(x+1)可能就变为1=1/x+1,造成逻辑错误
  51.                     flag_cut = 1;
  52.                     result0 ={ result0{1:i-1},'(', result0{i},')', result0{i+1:end}};
  53.                     index_upper=[index_upper(1:i-1);0;index_upper(i);0;index_upper(i+1:end)];
  54.                     i = i+3;
  55.                 end
  56.             end
  57.             result =[ result(1:i_result-1) result0 result(i_result+1:end)];
  58.         end%if
  59.     end %for
  60. end
  61. state = [result{1:end}];
  62. state1 = strrep(state,'divide','./');
  63. x = 0.01:0.01:3;
  64. eval(state1);
  65. plot(x,y);
  66. expression = '=\((.+)\.\/(.+)\)';
  67. replace = '=\\frac {1}{2}';
  68. newStr = regexprep(state1,expression,replace)
  69. latexf=[',newStr,'];
  70. lgh=legend(latexf);
  71. set(lgh,'interpreter','latex');
复制代码

回复

举报

5

主题

13

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2022-11-4 20:30:12 | 显示全部楼层
老师,这是运行结果,在您提供的代码基础上建立了y轴坐标    %y = 0.01:0.01:3;
由于您写的代码第64行运行显示语句不全,将代码改成了 %eval(state1)=strrep(state,'divide','./');
其他部分无删减修改,这是添加图片库的情况

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

392

主题

1225

帖子

3913

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3913
发表于 2022-11-4 22:08:13 | 显示全部楼层
王栋 发表于 2022-11-4 20:30
老师,这是运行结果,在您提供的代码基础上建立了y轴坐标    %y = 0.01:0.01:3;
由于您写的代码第64行运行 ...

你提到代码改成了 %eval(state1)=strrep(state,'divide','./'); 这句话并不对,修改之前要明白函数的意义,eval 函数表示执行 字符串形式的 state1.
比如:
eval("x=1;")和x=1;的含义是一样的
回复

举报

392

主题

1225

帖子

3913

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3913
发表于 2022-11-5 00:00:02 | 显示全部楼层
程序调通了,附件如下
最近学习进度还是很不错的,这些程序本身 就挺难
后面有机会应该把流程图画一画,明白了程序逻辑就好进行工作了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-4-16 06:55 , Processed in 0.044431 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表