Matlab fspecial中prewitt滤波器转置h'的具体含义是什么
Matlab fspecial Prewitt滤波器转置操作详解
操作本质
Matlab中提到的对fspecial('prewitt')返回结果执行h'操作,就是对生成的3×3滤波器矩阵做共轭转置。由于Prewitt滤波器的所有元素都是实数,共轭转置的效果和普通矩阵转置完全一致:将矩阵的行和列按位置互换,原矩阵第i行第j列的元素,会移动到转置后矩阵的第j行第i列位置。
不同核的效果对比
- 默认返回的水平边缘增强核
直接调用h = fspecial('prewitt')得到的核如下,通过计算垂直方向的灰度差检测水平走向的边缘:
h = 1 1 1 0 0 0 -1 -1 -1
- 转置后得到的垂直边缘增强核
执行h_v = h'后得到的核如下,通过计算水平方向的灰度差检测垂直走向的边缘,也就是官方文档提到的突出垂直边缘的效果:
h_v = 1 0 -1 1 0 -1 1 0 -1
可直接运行的使用示例
% 读取内置测试灰度图 I = imread('cameraman.tif'); % 生成默认Prewitt水平边缘检测核 h_h = fspecial('prewitt'); % 转置得到垂直边缘检测核 h_v = h_h'; % 执行卷积提取边缘 edge_horizontal = imfilter(I, h_h); edge_vertical = imfilter(I, h_v); % 结果可视化 figure subplot(1,3,1) imshow(I) title('原始图像') subplot(1,3,2) imshow(edge_horizontal) title('默认核提取的水平边缘') subplot(1,3,3) imshow(edge_vertical) title('转置核提取的垂直边缘')
补充说明
由于Prewitt核不存在复数元素,此处使用h'(共轭转置)和h.'(普通转置)得到的结果完全一致,官方文档采用h'是Matlab环境下的通用简写,直接使用即可。
内容的提问来源于stack exchange,提问作者user1535147
相关产品推荐
相关产品推荐

