convcorr.m

来自「matlab关于对图像进行卷积等操作的一段程序」· M 代码 · 共 91 行

M
91
字号
%Question No: 4
%Implement a program for image convolution and correlation using a
%rectangular convolution mask of any odd size. The mask should be input as
%an ASCII text file. Test the program using the following convolution
%kernels:
%a) 3 by 3 averaging
%a) 7 by 7 averaging
%a) 11 by 11 averaging

function convcorr(x)
f=imread(x);
f=im2double(f);
[r c]=size(f);
choice=input('1: 3 by 3 mask\n2: 7 by 7 mask\n3: 11 by 11 mask\n Enter your choice :');
switch(choice)
    case 1
        h1=textread('three.txt');
        h2=rot90(rot90(h1));
        g=padarray(f,[1 1]);
        for i=2:r+1
            for j=2:c+1
                sm1=0;sm2=0;
                 m=-1;
                     for k=1:3
                         n=-1;
                          for l=1:3
                            sm1=sm1+h1(k,l)*g(i+m,j+n); 
                            sm2=sm2+h2(k,l)*g(i+m,j+n); 
                            n=n+1;
                          end
                         m=m+1;
                     end
                cr(i-1,j-1)=sm1;
                cv(i-1,j-1)=sm2;
            end
        end
        figure,imshow(f),title('Original Image');
        figure,imshow(cv),title('Convolved Image');
        figure,imshow(cr),title('Correlated Image');
    case 2
        h1=textread('seven.txt');
        h2=rot90(rot90(h1));
        g=padarray(f,[3 3]);
        for i=4:r+3
            for j=4:c+3
                sm1=0;sm2=0;
                 m=-3;
                     for k=1:7
                         n=-3;
                          for l=1:7
                            sm1=sm1+h1(k,l)*g(i+m,j+n); 
                            sm2=sm2+h2(k,l)*g(i+m,j+n); 
                            n=n+1;
                          end
                         m=m+1;
                     end
                cr(i-3,j-3)=sm1;
                cv(i-3,j-3)=sm2;
            end
        end
        figure,imshow(f),title('Original Image');
        figure,imshow(cv),title('Convolved Image');
        figure,imshow(cr),title('Correlated Image');
    case 3
       h1=textread('eleven.txt');
        h2=rot90(rot90(h1));
        g=padarray(f,[5 5]);
        for i=6:r+5
            for j=6:c+5
                sm1=0;sm2=0;
                 m=-5;
                     for k=1:11
                         n=-5;
                          for l=1:11
                            sm1=sm1+h1(k,l)*g(i+m,j+n); 
                            sm2=sm2+h2(k,l)*g(i+m,j+n); 
                            n=n+1;
                          end
                         m=m+1;
                     end
                cr(i-5,j-5)=sm1;
                cv(i-5,j-5)=sm2;
            end
        end
        figure,imshow(f),title('Original Image');
        figure,imshow(cv),title('Convolved Image');
        figure,imshow(cr),title('Correlated Image');
    otherwise
        error('Wrong choice');
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?