天天不讲李 2021-12-20 14:44 采纳率: 100%
浏览 33
已结题

有一个.mat的矩阵,如何找到矩阵中每行0的个数并替换呢?

【Matlab】我有一个2048*2448的.mat类型的变量矩阵,恢复成面形后有很多多余的噪声部分,想要去除这些噪声,让图片边缘光滑,我想把矩阵中,如果一行中0的个数占整行80%(也有可能是其他的比例)以上的话,就让这一行都为0,把矩阵处理完再进行中值滤波,并拿原图减去中值滤波的结果,得到最后高频的部分,这个程序要怎么写呢?


load('mod.mat');
mod(mod==0)=nan;
a=medfilt2(mod);
figure,imagesc(a);
b=mod-a;
figure,imagesc(b);

这只是直接中值滤波并拿原图减去滤波结果的代码,会得到图中的结果,但是边缘和中心还是存在误差。

img

 200
 400
 600
 800
1000
1200
1400
1600
1800
2000
                          500 1000 1500 2000

图片是没有修改矩阵时得到的结果,边缘和中心存在很多的噪声。

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-12-20 14:51
    关注

    你好同学,你现在只是需要把每一行超过某个占比的都设置为0是吧
    代码可以大致这样写

    load('mod.mat');
    c = sum(mod==0, 2)/size(mod,2)>0.8; % 比如说占比大于0.8
    mod(c,:) = 0; % 都设置为0
    mod(mod==0)=nan;
    a=medfilt2(mod);
    figure,imagesc(a);
    b=mod-a;
    figure,imagesc(b);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)