在这之前需要我们知道像素点的可靠性
% 这反映了相位变化的平滑程度。以下是一个可能的实现,它使用了二阶差分来计算可靠性:
function rel = calculateReliability(wrappedPhase)
% 应用高斯滤波减少噪声
filteredImg = imgaussfilt(wrappedPhase, 2); % '2' 是高斯核的标准差
rel = zeros(size(filteredImg));
% 获取移动后的图像 (N-2, N-2)
img_im1_jm1 = filteredImg(1:end-2, 1:end-2);
img_i_jm1 = filteredImg(2:end-1, 1:end-2);
img_ip1_jm1 = filteredImg(3:end , 1:end-2);
img_im1_j = filteredImg(1:end-2, 2:end-1);
img_i_j = filteredImg(2:end-1, 2:end-1);
img_ip1_j = filteredImg(3:end , 2:end-1);
img_im1_jp1 = filteredImg(1:end-2, 3:end );
img_i_jp1 = filteredImg(2:end-1, 3:end );
img_ip1_jp1 = filteredImg(3:end , 3:end );
% 计算差分
gamma = @(x) sign(x) .* mod(abs(x), pi); % 一次差分算法
H = gamma(img_im1_j - img_i_j) - gamma(img_i_j - img_ip1_j );
V = gamma(img_i_jm1 - img_i_j) - gamma(img_i_j - img_i_jp1 );
D1 = gamma(img_im1_jm1 - img_i_j) - gamma(img_i_j - img_ip1_jp1);
D2 = gamma(img_im1_jp1 - img_i_j) - gamma(img_i_j - img_ip1_jm1);
% 计算二次差分的和
D = sqrt(H.*H + V.*V + D1.*D1 + D2.*D2);
% 可信度定义为二次差分的倒数
rel(2:end-1, 2:end-1) = 1./D;
% 处理异常值,例如将非常高的可靠性值限制在一个阈值内
maxReliability = 200; % 可以根据需要调整这个值
rel(rel > maxReliability) = maxReliability;
% 将所有空值和原图中的非空值赋值为0
rel(isnan(rel) & ~isnan(filteredImg)) = 0;
% 将原图中的空值在可信度中也赋值为空
rel(isnan(filteredImg)) = nan;
% 对可靠性结果进行平滑处理
rel = imgaussfilt(rel, 1); % 使用高斯滤波平滑
end
要功能是计算包裹相位图像(wrappedPhase
)的可靠性。这种可靠性计算对于相位图像处理是非常重要的,尤其是在如相位展开或高精度测量等应用中。以下是详细步骤分析:
高斯滤波降噪:
计算一阶差分:
gamma
函数处理差分值,保证差分结果落在合适的范围内(例如,对于相位值,这通常是-π
到π
)。二阶差分的计算:
可靠性的定义:
处理异常值:
空值处理:
结果平滑处理:
总的来说,这段代码通过计算二阶差分来评估包裹相位图像的局部可靠性,这对于确保相位展开等后续处理的准确性至关重要。通过这种方法,可以识别出图像中可靠性较高的区域,这些区域通常在相位展开或分析中更为可信。
在图像处理中,边缘是像素值发生显著变化的地方,通常对应于图像特征如线条、边界等。这里的方法是通过计算相邻像素间的可靠性来估算这些边缘的显著性。?
function [h_edges, v_edges] = get_edges(rel)
[Ny, Nx] = size(rel);
h_edges = [rel(1:end, 2:end) + rel(1:end, 1:end-1), nan(Ny, 1)];%补一行空值
v_edges = [rel(2:end, 1:end) + rel(1:end-1, 1:end); nan(1, Nx)];%补一列空值
end
水平边缘可靠性(h_edges
):
h_edges
中的每个元素代表了一对水平相邻像素的综合可靠性。h_edges
的最右侧列上补充 NaN
。垂直边缘可靠性(v_edges
):
v_edges
中的每个元素表示一对垂直相邻像素的综合可靠性。v_edges
的最底部行上补充 NaN
。原理解释: