我有一些提示:
>这只是一个小问题,但filter2执行相关.实际上,您需要执行卷积,在执行像素邻域和内核之间的加权和之前将内核旋转180度.但是因为内核是对称的,convolution and correlation perform the same thing in this case.
>我建议您使用imfilter来促进过滤,因为您已经使用了图像处理工具箱中的方法.它比filter2或conv2更快,并利用了Intel Integrated Performance Primitives.
>我强烈建议你先做双精度的一切,然后在你完成后转换回uint8.使用im2double将图像(很可能是uint8)转换为双精度.执行锐化时,这会保持精度并过早地投射到uint8然后执行减法会给您带来意想不到的副作用. uint8将限制结果为负数或超过255,这也可能是您没有得到正确结果的原因.因此,将图像转换为双倍,过滤图像,通过使用过滤结果减去图像来锐化结果(通过拉普拉斯运算符),然后在im2uint8之前转换回uint8.
您的代码和链接之间的差异是:
>内核有一个积极的中心.因此,1是负数,而中心是8,您必须将过滤结果添加到原始图像.
>在链接中,它们将过滤后的响应标准化,使最小值为0,最大值为1.
>将过滤后的响应添加到原始图像后,还可以将此结果标准化,使最小值为0,最大值为1.
>执行线性对比度增强,使强度60成为新的最小值,强度200成为新的最大值.您可以使用imadjust执行此操作.该函数接收图像以及两个数组 – 第一个数组是输入最小和最大强度,第二个数组是最小值和最大值应映射到的位置.因此,我想将输入强度60映射到输出强度0,输入强度200映射到输出强度255.确保指定的强度介于0和1之间,因此您必须将每个数量除以如文档中所述255.
因此:
clc;
close all;
a =