J'ai généré une fonction pour appliquer une transformation linéaire par morceaux à une image. Sur la base de cette fonction, je ne suis pas sûr si elle fonctionne correctement. Parfois, l'image entière apparaît en blanc et tous les pixels sont répertoriés en 255. D'autres fois, l'image de sortie apparaît mais les résultats varient. En raison des résultats variables, je crois qu'il y a un problème avec ma fonction. Le code de la fonction est ici:Fonction de transformation linéaire par morceaux MATLAB
function T = piecewise_transform(f,n,r1,s1,r2,s2,r3,s3)
% breakpoints: (0,0),(r1,s2),(r2,s2),(r3,s3),((L-1),(L-1))
% to get alpha, beta, etc, don't suppress echoing (remove ;)
% find the parameters of each line
L = 2^n;
% s = a*r+b
a1 = ((s1-0)/(r1-0));
b1 = ((s1/r1));
a2 = ((s2-s1)/(r2-r1));
b2 = ((s1*r2)-(s2*r1)/(r2-r1));
a3 = ((s3-s2)/(r3-r2));
b3 = (((s3-s2)/(r3-r2))*(s2/r2));
a4 = (((L-1)-s3)/((L-1)-r3));
b4 = (((L-1)-s3)/((L-1)-r3)*(s3/r3));
% put all parameters in two vectors
A = [a1,a2,a3,a4]
B = [b1,b2,b3,b4]
[row,col] = size(f);
T = f;
for i = 1:row
for j=1:col
% find which line to use
%line 1
if f(i,j) < r1
flag = 1;
end
% line 2
if f(i,j) > r1 && f(i,j)<r2
flag = 2;
end
% line 3
if f(i,j) > r2 && f(i,j)<r3
flag = 3;
end
% line 4
if f(i,j) > r3 && f(i,j)<(L-1)
flag = 4;
end
T(i,j) = (A(flag)*f(i,j) + B(flag));
end
end
T = uint8(T);
imshow(T)
Voici les résultats de certains de mes tests:
Sur la base de mon code, pourquoi suis-je recevoir des résultats différents?