⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iblockrec1.asv

📁 Block Recovery code - matlab
💻 ASV
📖 第 1 页 / 共 2 页
字号:
function x=IBlockRec1(IO)
img1=IO;
[m,n]=size(img1);
    a=6; % 4
    lh=[-1,-1,-1;2,2,2;-1,-1,-1];
    lv=[-1,2,-1;-1,2,-1;-1,2,-1];
    m=100;
    n=100;
    img2=IO;
    IR=IO;
    for x=7:12:m-10 
        for y=7:12:n-10 
            %center pixel of the Block
            x1=x+1;y1=y+1;
            
            %Line orientation Detection
            i=x1-a;
            j=y1-a;
            mi=x-2;
            nj=y-2;
            rh1=2*(img1(i,j-1)+img1(i,j)+img1(i,j+1))-(img1(i-1,j-1)+img1(i-1,j)+img1(i-1,j+1)+img1(i+1,j-1)+img1(i+1,j)+img1(i+1,j+1));
            rv1=2*(img1(i-1,j)+img1(i,j)+img1(i+1,j))-(img1(i-1,j-1)+img1(i,j-1)+img1(i+1,j-1)+img1(i-1,j+1)+img1(i,j+1)+img1(i+1,j+1));
            
            i=x1-a;
            j=y1+a;
            rh2=2*(img1(i,j-1)+img1(i,j)+img1(i,j+1))-(img1(i-1,j-1)+img1(i-1,j)+img1(i-1,j+1)+img1(i+1,j-1)+img1(i+1,j)+img1(i+1,j+1));
            rv2=2*(img1(i-1,j)+img1(i,j)+img1(i+1,j))-(img1(i-1,j-1)+img1(i,j-1)+img1(i+1,j-1)+img1(i-1,j+1)+img1(i,j+1)+img1(i+1,j+1));

            i=x1+a;
            j=y1-a;
            rh3=2*(img1(i,j-1)+img1(i,j)+img1(i,j+1))-(img1(i-1,j-1)+img1(i-1,j)+img1(i-1,j+1)+img1(i+1,j-1)+img1(i+1,j)+img1(i+1,j+1));
            rv3=2*(img1(i-1,j)+img1(i,j)+img1(i+1,j))-(img1(i-1,j-1)+img1(i,j-1)+img1(i+1,j-1)+img1(i-1,j+1)+img1(i,j+1)+img1(i+1,j+1));
         
            i=x1+a;
            j=y1+a;
            rh4=2*(img1(i,j-1)+img1(i,j)+img1(i,j+1))-(img1(i-1,j-1)+img1(i-1,j)+img1(i-1,j+1)+img1(i+1,j-1)+img1(i+1,j)+img1(i+1,j+1));
            rv4=2*(img1(i-1,j)+img1(i,j)+img1(i+1,j))-(img1(i-1,j-1)+img1(i,j-1)+img1(i+1,j-1)+img1(i-1,j+1)+img1(i,j+1)+img1(i+1,j+1));
            
            IR(mi+0,nj+0)=IR(mi-1,nj+0);
            IR(mi+0,nj+1)=IR(mi-1,nj+1);
             IR(mi+0,nj+2)=IR(mi-1,nj+2);
             IR(mi+0,nj+3)=IR(mi-1,nj+3);
            
            Eh=abs(rh1) + abs(rh2) + abs(rh3) + abs(rh4);
            Ev=abs(rv1) +abs(rv2) + abs(rv3) + abs(rv4);
            
            if Eh > Ev 
                line_dom='H';
            else
                line_dom='V';
            end
            
            %Surrounding Vectors
            % Find surrounding Vectors from 1 to 48
            i=1;
            y1=y-a;
            for x1=x-a:x+a
                for u=0:a-1
                    for v=0:a-1
                        s(u+1,v+1,i)=img1(x1+u,y1+v);
                    end
                end
                i=i+1;
            end
                
            %next 
            x1=x+a;
            for y1=y-(a-1):y+a
                for u=0:a-1
                    for v=0:a-1
                        s(u+1,v+1,i)=img1(x1+u,y1+v);
                    end
                end
                
%                s(:,:,i)=[img1(x1,y1),img1(x1+1,y1),img1(x1+2,y1);img1(x1,y1+1),img1(x1+1,y1+1),img1(x1+2,y1+1);img1(x1,y1+2),img1(x1+1,y1+2),img1(x1+2,y1+2)];
                i=i+1;
            end
            
            %next
            y1=y+a;
            for x1=x+(a-1):-1:x-a
                for u=0:a-1
                    for v=0:a-1
                        s(u+1,v+1,i)=img1(x1+u,y1+v);
                    end
                end
                i=i+1;
%                 s(:,:,i)=[img1(x1,y1),img1(x1+1,y1),img1(x1+2,y1);img1(x1,y1+1),img1(x1+1,y1+1),img1(x1+2,y1+1);img1(x1,y1+2),img1(x1+1,y1+2),img1(x1+2,y1+2)];
%                 i=i+1;
            end
            
            %next
            x1=x-a;
            for y1=y+(a-1):-1:y-(a-1)
                for u=0:a-1
                    for v=0:a-1
                        s(u+1,v+1,i)=img1(x1+u,y1+v);
                    end
                end
                i=i+1;
%                 s(:,:,i)=[img1(x1,y1),img1(x1+1,y1),img1(x1+2,y1);img1(x1,y1+1),img1(x1+1,y1+1),img1(x1+2,y1+1);img1(x1,y1+2),img1(x1+1,y1+2),img1(x1+2,y1+2)];
%                 i=i+1;
             end                
            

            %find S Product
            for i=1:(8*a)
                S(:,:,i)=dct2(s(:,:,i));
                S(:,:,i)=abs(S(:,:,i));
            end
            
            %assign x and y values
            x2=x;
            y2=y;

            for rec=1:3%4
                % find Recovery vectors r1, r2
                switch line_dom
                    case 'H'
                        y1=y2;
                        if rec==1
                            x1=x2-(a-1);
                        elseif rec==2
                            x1=x2-(a-2);
                        elseif rec==3
                            x1=x2-(a-3);
%                         elseif rec==4
%                             x1=x2-(a-4);
                        end
                        for u=0:a-1
                            for v=0:a-1
                                r(u+1,v+1,1)=img1(x1+u,y1+v);
                            end
                        end
                        
                        if rec==1
                            x1=x2+(a-1);
                        elseif rec==2
                            x1=x2+(a-2);
                        elseif rec==3
                            x1=x2+(a-3);
%                         elseif rec==4
%                             x1=x2+(a-4);
                        end
                        for u=0:a-1
                            for v=0:a-1
                                r(u+1,v+1,2)=img1(x1+u,y1+v);
                            end
                        end
                    case 'V'
                        x1=x2;
                        if rec==1
                            y1=y2-(a-1);
                        elseif rec==2 
                            y1=y2-(a-2);
                        elseif rec==3
                            y1=y2-(a-3);
%                         elseif rec==4
%                             y1=y2-(a-4);
                        end
                        for u=0:a-1
                            for v=0:a-1
                                r(u+1,v+1,1)=img1(x1+u,y1+v);
                            end
                        end
                        
                        if rec==1
                            y1=y2+(a-1);
                        elseif rec==2
                            y1=y2+(a-2);
                        elseif rec==3
                            y1=y2+(a-3);
%                         elseif rec==4
%                             y1=y2+(a-4);
                        end
                        for u=0:a-1
                            for v=0:a-1
                                r(u+1,v+1,2)=img1(x1+u,y1+v);
                            end
                        end
                end

                %find R product
                for i=1:2
                    R(:,:,i)=dct2(r(:,:,i));
                    R(:,:,i)=abs(R(:,:,i));
                end


               
                 for iter=1:10
                    
                    for i= 1:2
                        minx=1;
                        minxvalue=0;
                        for u=1:a
                            for v=1:a
                                minxvalue=minxvalue + ((R(u,v,i)-S(u,v,1))^2);
                            end
                        end
                        minxvalue=sqrt(double(minxvalue));

                        for j=2:(8*a)
                            minnextvalue=0;
                            for u=1:a
                                for v=1:a
                                    minnextvalue=minnextvalue+((R(u,v,i)-S(u,v,j))^2);
                                end
                            end
                            minnextvalue=sqrt(double(minnextvalue));
                            if minxvalue > minnextvalue
                                minxvalue=minnextvalue;
                                minx=j;
                            end
                        end
                        d(i)=minx;
                    end

                    
                    for i=1:2
                        Scap(:,:,i)=S(:,:,d(i));
                    end

                    
                    for i=1:2
                        modScap(i)=norm(double(Scap(:,:,i)));
                        modScap(i)=modScap(i)^2;
                        % find dot product of R & Scap
                        dProduct=0;
                        for u=1:a
                            for v=1:a
                                dProduct=dProduct + (R(u,v,i)*Scap(u,v,i));
                            end
                        end
                        
                        if modScap(i)~=0
                            PS(:,:,i)=(dProduct/modScap(i)) .* Scap(:,:,i);
                        else
                            PS(:,:,i)=dProduct .* Scap(:,:,i);
                        end
                    end

                    for i=1:2
                        for u=1:a
                            for v=1:a
                                if u ~= 0 & v ~= 0
                                    R(u,v,i)=PS(u,v,i);
                                else
                                    R(u,v,i)=R(u,v,i);
                                end
                            end
                        end
                    end

                    
                    
%                     A1=img1(:);
%                     Fmin=min(A1);
%                     Fmax=max(A1);

⌨️ 快捷键说明

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