📄 iblockrec1.asv
字号:
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 + -