天天不讲李 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 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分