Matlab图像处理app(截图暂时只能截取原图或灰度图)

因为之前做过一个类似的app,所以我这次在app上的功能只是在灰度图上实现,不能叠加的实现,如果想要所有功能显示叠加效果,可以每次操作后使用一个全局变量将变换后的图片保存即可;

 边缘提取部分:

function sureButtonPushed(app, event)
            app.bianyuan=app.ListBox.Value;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            switch app.bianyuan
                case 'Roberts'
                    [J, thresh] = edge(app.picture, 'Roberts', 30/255); 
                    imshow(J,'Parent',app.UIAxes2);
                case 'Canny'
                    [J, thresh] = edge(app.picture, 'canny'); 
                    imshow(J,'Parent',app.UIAxes2);
                case 'LOG'
                    [J, thresh] = edge(app.picture, 'log');
                    imshow(J,'Parent',app.UIAxes2);
                case 'Prewit'
                    [J, thresh] = edge(app.picture, 'prewitt');
                    imshow(J,'Parent',app.UIAxes2);
                case 'Sobel'
                    [J, thresh] = edge(app.picture, 'sobel');
                    imshow(J,'Parent',app.UIAxes2);
            end
        end

对比度部分:

 function SliderValueChanging(app, event)
            changingValue = event.Value;
            changingValue=changingValue./100;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            if changingValue<0.5
                duibi=imadjust(app.picture,[changingValue,1-changingValue],[]);
                imshow(duibi,'Parent',app.UIAxes2);
            else
                changingValue=0;
                duibi=imadjust(app.picture,[changingValue,1-changingValue],[]);
                imshow(duibi,'Parent',app.UIAxes2);
            end
        end

直方图均衡化部分:

function ButtonGroupSelectionChanged(app, event)
            selectedButton = app.ButtonGroup.SelectedObject;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            switch selectedButton.Text
                case '是'
                    zhifang=histeq(app.picture);
                    imshow(zhifang,'Parent',app.UIAxes2);
                case '否'
                    imshow(app.picture,'Parent',app.UIAxes2);
                    return;
            end
        end

模糊度部分:

        function Spinner_2ValueChanged(app, event)
            value = app.Spinner_2.Value;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            way=fspecial('motion',value,value);
            picture2=imfilter(app.picture,way);
            imshow(picture2,'Parent',app.UIAxes2);
        end

锐化部分:

 function SpinnerValueChanged(app, event)
            value = app.Spinner.Value;
            value=value./100;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            way=fspecial('sobel');
            picture3=imfilter(app.picture,way);
            picture3=app.picture+uint8(picture3)*value;
            imshow(picture3,'Parent',app.UIAxes2);
        end

亮度部分:

   function Spinner_3ValueChanged(app, event)
            value = app.Spinner_3.Value;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            picture4=imadd(app.picture,value);
            imshow(picture4,'Parent',app.UIAxes2);
        end

图像分割部分:

 function sureButton_2Pushed(app, event)
            chance=app.ListBox_2.Value;
            size1=size(app.picture);
            if(numel(size1)>2)
                app.picture=rgb2gray(app.picture);
            end
            switch chance
                case 'Otsu'
                    M=graythresh(app.picture);
                    I=im2bw(app.picture,M);
                    imshow(I,'Parent',app.UIAxes2);
                case '迭代阈值分割'
                    I=im2double(app.picture);
                    S=0.1;
                    S1=(max(I(:))+min(I(:)))/2;
                    r1=find(I>S1);
                    r2=find(I<=S1);
                    S2=(mean(I(r1))+mean(I(r2)))/2;
                    while abs(S2-S1)>S
                          S1=S2;
                          r1=find(I>S1);
                          r2=find(I<=S1);
                          S2=(mean(I(r1))+mean(I(r2)))/2;
                    end
                    I=im2bw(I,S2);
                    imshow(I,'Parent',app.UIAxes2);
                case '区域生长法'
                    imshow(app.picture,'Parent',app.UIAxes2);
                    I=im2double(app.picture);
                    [M,N]=size(I);
                    [y,x]=getpts(app.UIAxes2);
                    x1=round(x);
                    y1=round(y);
                    seed=I(x1,y1);
                    grow1=zeros(M,N);%要绘制二值图,就可以先设置为0数组
                    grow1(x1,y1)=1;%种子点设为1,满足条件的点在后续判断中也会设为一
                     
                    growcount=1; %待处理点个数
                    threshold=0.15;%与isinteger相互结合起来理解,如果没有isinteger,该值应该变得很大
                     
                    while growcount>0
                        growcount=0;
                         for i=1:M %让种子去融合图片中满足的所有点
                            for j=1:N
                                if grow1(i,j)==1 %点在"栈"内,即一开始先检测到种子点,然后根据判断条件去判断种子点邻域的点是否满足条件,若满足为1,然后进行下一轮循环进行判断,直到循环时没有点可以满足添加进行融合了
                                    if (i-1)>0&(i+1)<M&(j-1)>0&(j+1)<N %确保可以将8邻域完全放置
                                        for u=-1:1 %8邻域生长
                                            for v=-1:1
                                                if (grow1(i+u,j+v)==0&abs(I(i+u,j+v)-seed)<=threshold)%只有在点为0的时候才进行,否则gowtcount会计算错误
                                                    grow1(i+u,j+v)=1;%种子合并其他点,只要满足条件的点都会和种子点一样置1
                                                    growcount=growcount+1;  %记录此次新生长的点个数
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                    imshow(grow1,'Parent',app.UIAxes2);

                case '分水岭分割'       
                    way=strel('disk',10);
                    I=app.picture;
                    tidu=imgradient(I);
                    fs=imerode(I,way);
                    fscj=imreconstruct(fs,I);
                    pz=imdilate(fscj,way);
                    pzcj=imcomplement(imreconstruct(imcomplement(pz),imcomplement(fscj)));
                    dgm=imregionalmax(pzcj);
                    I2=labeloverlay(I,dgm);
                    se2 = strel(ones(5,5));
                    fgm2 = imclose(dgm,se2);
                    fgm3 = imerode(dgm,se2);
                    fgm4=bwareaopen(fgm3,15);         
                    I(fgm4)=255;
                    bw1=imbinarize(pzcj);
                    D = bwdist(bw1);
                    DL = watershed(D);
                    bgm = DL == 0;
                    gmag2 = imimposemin(tidu, bgm|fgm4);
                    L=watershed(gmag2);
                    labels = imdilate(L==0,ones(3,3)) + 2*bgm + 3*fgm4;
                    I4 = labeloverlay(I,labels);
                    imshow(I4,'Parent',app.UIAxes2);

            end
        end

open:

 function openButtonPushed(app, event)
            [filename,pathname]=uigetfile('*.jpg','picture');
            if isequal(pathname,'')
                msgbox('没有选中图片','nn','warn');
            else
                app.name=strcat(pathname,filename);
                app.EditField.Value=app.name;
                app.picture=imread(app.name);
                imshow(app.picture,'Parent',app.UIAxes);
            end

        end

levelangle:

 function levelangleKnob_2ValueChanging(app, event)
            changingValue = event.Value;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            picture6=imrotate(app.picture,changingValue);
            imshow(picture6,'Parent',app.UIAxes2);
        end

mirror:

  function mirrorKnobValueChanged(app, event)
            value = app.mirrorKnob.Value;
            size1=size(app.picture);
            if numel(size1)>2
                app.picture=rgb2gray(app.picture);
            end
            switch value
                case 'x镜面'
                    picture7=flip(app.picture,1);
                case 'y镜面'
                    picture7=flip(app.picture,2);
            end
            imshow(picture7,'Parent',app.UIAxes2);
        end

灰度图:

  function Button_6Pushed(app, event)
            app.picture=rgb2gray(app.picture);
            imshow(app.picture,'Parent',app.UIAxes2);
        end

截图:

 function Button_5Pushed(app, event)
            savepicture=figure('Visible','on');
            copyobj(app.UIAxes2,savepicture);
            set(gca,'Units','normalized','Position',[0 0 1 1]);
            for i=1:1:2
                [x,y]=getpts;
                if(i==1)
                    app.cut1=x;
                    app.cut2=y;
                else
                    app.cut3=x;
                    app.cut4=y;
                end
            end
%             msgbox(string(app.cut1));
%             msgbox(string(abs(app.cut1-app.cut3)));
%             msgbox(string(abs(app.cut4-app.cut2)));
%             msgbox(string(app.cut2));
%             msgbox(string(app.cut3));
%             msgbox(string(app.cut4));
%             [m,n]=size(app.picture);
%             m=floor(m./2);
%             n=floor(n./2);

% k=findall(gcf,'type','line')
% x=get(k,'xdata');
% y=get(k,'ydata');
% x=cell2mat(x);
% y=cell2mat(y);
              saveas(savepicture,'1.jpg');
%             n=imcrop(savepicture,[app.cut1,app.cut2,app.cut3,app.cut4]);
%             imwrite(k(x(app.cut1:app.cut3),y(app.cut2:app.cut4)),'1.jpg');
              imwrite(app.picture(app.cut1:app.cut3,app.cut2:app.cut4),'0.jpg');
        end

保存:


        function saveButtonPushed(app, event)
            savepicture=figure('Visible','off');
            copyobj(app.UIAxes2,savepicture);
            set(gca,'Units','normalized','Position',[0.2 0.2 0.8 0.8]);
            saveas(savepicture,'nb.jpg');
        end

猜你喜欢

转载自blog.csdn.net/new_EAGLE/article/details/125908563
今日推荐