大唐盛世·横扫欧亚·君临天下 2021-07-26 19:24 采纳率: 50%
浏览 569
已结题

将matlab脚本中的代码写到GUI界面

下面是网上找的用matlab实现的磨皮算法代码,要求将其写到GUI界面,求其中GUI界面的function pushbotton后面应该怎么修改?

img=imread('xxx.jpg');
noisyImg=imread('xxx.jpg');
r=10;
level=5;
sigma=10+level^2;
dnImg=denoiseBasedLocalStat(noisyImg,r,sigma);
figure,imshow(dnImg);

function dnImg = denoiseBasedLocalStat(img,r,sigma)% 图像滤波去噪
if size(img,3)==1%灰度图,则直接进行灰度图像滤波去噪
    img=double(img);
    dnImg=denoiseBasedLocalStat_gray(img,r,sigma);
    dnImg=uint8(dnImg);
end
if size(img,3)==3%彩色图,则提取出表示亮度的ycbcr矩阵,进行灰度图像滤波去噪
    ycc=rgb2ycbcr(img);
    y=ycc(:,:,1);
    dnY=denoiseBasedLocalStat_gray(double(y),r,sigma);
    ycc(:,:,1)=uint8(dnY);
    dnImg=ycbcr2rgb(ycc);%去噪后重新转回颜色矩阵
end
end

function dnImg=denoiseBasedLocalStat_gray(img,r,sigma)%灰度图像滤波去噪
dnImg=zeros(size(img));
img=double(img);
paddedImg=padarray(img,[r,r],'symmetric','both');
[Yim,YYim]=intergalMap(paddedImg);
for i=r+1:size(paddedImg,1)-r
    for j=r+1:size(paddedImg,2)-r
        rectSum=Yim(i+r+1,j+r+1)+Yim(i-r,j-r)-Yim(i-r,j+r+1)-Yim(i+r+1,j-r);
        rectSquareSum=YYim(i+r+1,j+r+1)+YYim(i-r,j-r)-YYim(i-r,j+r+1)-YYim(i+r+1,j-r);
        num=(2*r+1)^2;
        avg=rectSum/num;
        var=rectSquareSum/num-avg^2;
        k=var/(var+sigma^2);
        dnImg(i-r,j-r)=(1-k)*avg+k*img(i-r,j-r);
    end
end
end
 
function [Yim,YYim]=intergalMap(img)
% 生成积分图
paddedImg=padarray(img,[1 1],0,'pre');%图像矩阵的第一列左边与第一行上面均补上0
Yim=zeros(size(paddedImg));
YYim=Yim;
for i=2:size(paddedImg,1)
    for j=2:size(paddedImg,2)
        Yim(i,j)=Yim(i,j-1)+Yim(i-1,j)-Yim(i-1,j-1)+paddedImg(i,j);
        YYim(i,j)=YYim(i,j-1)+YYim(i-1,j)-YYim(i-1,j-1)+paddedImg(i,j)^2;
    end
end
end

GUI的实现
axis off
[filename pathname] =uigetfile({'.jpg';'.bmp';'.'},'打开图片');
str=[pathname filename];
im=imread(str);
axes(handles.axes1);
然后后面不会写了
求帮助!

  • 写回答

1条回答 默认 最新

  • CSDN专家-Matlab_Fans 2021-07-26 20:38
    关注

    denoiseBasedLocalStat函数存成denoiseBasedLocalStat.m文件,另外两个函数denoiseBasedLocalStat_gray、intergalMap作为denoiseBasedLocalStat函数的子函数。将denoiseBasedLocalStat.m文件与GUI文件放在同一目录下,在GUI中直接调用denoiseBasedLocalStat函数即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 怎么让数码管亮的同时让led执行流水灯代码
  • ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串
  • ¥85 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)