标题似乎有些不清楚,但我将向您介绍整个故事,并希望您对此发表评论。
我正在尝试检测给定图像中的某些边缘,尤其是那些比其他边缘出现得更多的边缘。为此,最好的想法是傅里叶变换,以将离散像素域映射到频域。在应用傅立叶变换之前,我必须测量一些所需边缘的距离的平均值,然后使用傅立叶变换来找到它们的频率。问题在于如何设置FFT算法的平均距离(在Python或Matlab上)。
谢谢
最佳答案
FFT将返回1
和number_of_samples/2
之间每个重复元素的频率。
因此,您将在image_width/100
附近寻找频率峰值。
如果您的FFT输出数组从零开始索引,则FFT_array[0]
将是稳态偏移,而FFT_array[image_width/100]
将是您要寻找的峰值。
用伪代码,您的函数将类似于:
image_full = # 2d array of pixel values ex: [[1,2,3],[4,5,6],[7,8,9]]
width_slice_center = image_full[int(len(image_full)/2)]
FFT_slice = FFT(width_slice_center)
#this is where you'll find the values that you are looking for
range = 5 #how far away from exactly 100px you want to look for edges
frequency_100 = int(len(image_full[0])/100) #how many times something 100px wide would appear in image
total_edges_signal = sum(FFT_slice[frequency_100-5:frequency_100+5]) #signal strength of edges in at given width
#then tune the total_edges_signal using an image with known edges
total_edges = int(total_edges_signal*tuning_parameter)
我试图使伪代码尽可能通用,并且您应该能够修改该想法以匹配许多数据类型。我希望这有帮助。
关于python - 如何应用傅立叶变换来提取图像中某些边缘的频率?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32527952/