质量图导向法解包裹之---计算边缘可靠性
2023-12-20 17:11:23
在这之前需要我们知道像素点的可靠性
% 这反映了相位变化的平滑程度。以下是一个可能的实现,它使用了二阶差分来计算可靠性:
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
函数处理差分值,保证差分结果落在合适的范围内(例如,对于相位值,这通常是-π
到π
)。
-
二阶差分的计算:
- 通过结合不同方向的一阶差分计算二阶差分。二阶差分可以视为相邻像素差分的差分,提供了更细微的局部变化信息。
-
可靠性的定义:
- 将二阶差分的平方和的平方根的倒数定义为可靠性。这种方式认为,当相邻像素间的差分较小(即图像在该区域较为平滑),可靠性较高。
-
处理异常值:
- 对于非常高的可靠性值,将其限制在一个预设的阈值内,避免因极端值导致的可靠性评估失真。
-
空值处理:
- 将原始图像中非空值对应的可靠性矩阵中的空值设为0,并保留原始图像中的空值。
-
结果平滑处理:
- 使用高斯滤波平滑处理最终的可靠性结果,以提高结果的一致性。
总的来说,这段代码通过计算二阶差分来评估包裹相位图像的局部可靠性,这对于确保相位展开等后续处理的准确性至关重要。通过这种方法,可以识别出图像中可靠性较高的区域,这些区域通常在相位展开或分析中更为可信。
在图像处理中,边缘是像素值发生显著变化的地方,通常对应于图像特征如线条、边界等。这里的方法是通过计算相邻像素间的可靠性来估算这些边缘的显著性。?
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
。
原理解释:
- 这种计算方法基于这样一个假设:边缘的可靠性可以通过相邻像素的可靠性之和来估计。如果两个相邻像素都具有高可靠性,那么它们之间的边缘也被认为是可靠的。
- 通过这种方法,可以在图像处理任务中,如边缘检测或特征提取,快速地识别出哪些边缘是可靠的。
文章来源:https://blog.csdn.net/weixin_43608857/article/details/135109572
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!