PROJECT 04-02

本文探讨了傅立叶变换在图像处理领域的应用,包括计算图像的中心傅立叶谱、显示幅度谱与相位谱,并利用傅立叶谱计算图像的平均值。
部署运行你感兴趣的模型镜像

PROJECT 04-02

Fourier Spectrum and AverageValue

(a) Download Fig. 4.18(a) from the book web site andcompute its (centered) Fourier spectrum.

(b) Display the spectrum.

(c) Use your result in (a) to compute the average valueof the image.

 

f=imread('Fig4.11(a).jpg');
F=fft2(f);%使用函数fft2可计算傅立叶变换
 
[M,N]=size(f);
s=0;
s=sum(sum(abs(F(1:M,1:N))));
average_value_of_imagine=s/(M*N)
S=log(1+abs(F));%计算傅立叶幅度谱并做对数变换
figure;plot(S);title('二维图像显示幅度谱')%二维图像显示幅度谱
x=0:1:255;y=0:1:255;
[x,y]=meshgrid(x,y);
figure;mesh(S);title('三维图像显示幅度谱')%三维图像显示幅度谱
 
Q=angle(F);%计算傅立叶变换相位谱
figure;plot(Q);title('二维图像显示相位谱') %二维图像显示相位谱
 
x=0:1:255;y=0:1:255;
[x,y]=meshgrid(x,y);
figure;mesh(Q);title('三维图形显示相位谱')%三维图形显示相位谱


您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

你遇到的错误: ``` ❌ 处理失败: 'ticktime' ``` 说明:**在调用 `ak.stock_intraday_sina(symbol=symbol, date=date_str)` 时返回的数据中缺少 `'ticktime'` 这一列,或者整个 DataFrame 结构异常。** --- ## 🚨 根本原因分析 ### ✅ 错误定位: ```python df = ak.stock_intraday_sina(symbol=symbol, date=date_str) ``` 这行代码在 **2025 年的数据上无法获取有效分时数据**,因为: > ❗❗ **2025 年是未来日期,还没有真实交易数据!** 所以 `ak.stock_intraday_sina()` 返回的是空数据或结构不完整的假数据(比如只有表头、没有内容),导致你在后续访问 `['price']`, `['kind']` 等列时报错。 但为什么报错是 `'ticktime'`? → 因为你可能在函数里或其他地方引用了该列,而它根本不存在于返回值中 → 触发 `KeyError: 'ticktime'` --- ## ✅ 验证方法:打印原始返回结果 我们先来调试一下这个接口到底返回了什么: ### 🔍 调试代码(建议运行一次) ```python import akshare as ak # 尝试一个未来的日期 df = ak.stock_intraday_sina(symbol="sz002401", date="20250401") print("返回类型:", type(df)) print("是否为空:", df.empty) print("列名:", df.columns.tolist() if not df.empty else "DataFrame为空") print("前几行:\n", df.head()) ``` ### ⚠️ 实际输出预期为: ``` 返回类型: <class 'pandas.DataFrame'> 是否为空: True 列名: DataFrame为空 ``` 👉 或者抛出异常,如: ``` KeyError: 'ticktime' ValueError: No data returned for this date. ``` --- ## ✅ 正确做法:使用 **真实存在的历史交易日** 例如: - ✅ `2023-04-03` - ✅ `2024-04-01` - ✅ `2024-12-31` - ❌ `2025-xx-xx` → 尚未发生,无数据! --- ## ✅ 修改建议后的调用示例 ```python if __name__ == "__main__": download_and_process_intraday( symbol="sz002401", start_date="2024-04-01", end_date="2024-04-10", save_path=r"C:\Users\Dell\Desktop\中远海科分时数据" ) ``` ✅ 这些日期是真实的 A 股交易日,`akshare` 可以正常拉取数据。 --- ## ✅ 增强容错性:改进函数以防止 KeyError 即使日期合法,也可能因网络、停牌等原因返回不完整数据。我们在函数中加入更安全的检查: ### ✅ 改进版核心逻辑(加在 `try:` 内部): ```python try: df = ak.stock_intraday_sina(symbol=symbol, date=date_str) # === 安全检查返回值 === if df is None or not isinstance(df, pd.DataFrame): print(f" ❌ 数据无效:返回非 DataFrame 类型") fail_dates.append(readable_date) continue if df.empty: print(f" ❌ {readable_date} 无数据(空DataFrame)") fail_dates.append(readable_date) continue # 检查必要列是否存在 required_cols = ['price', 'volume', 'kind'] missing_cols = [col for col in required_cols if col not in df.columns] if missing_cols: print(f" ❌ 缺少必要列: {missing_cols}") fail_dates.append(readable_date) continue # 继续处理... ``` 这样就不会因为 `df['price']` 报 `KeyError` 而崩溃。 --- ## ✅ 补充:如何查找某只股票最近的真实交易日? 你可以先测试最近一天是否有数据: ```python from datetime import datetime, timedelta def get_latest_valid_date(symbol, days_back=30): today = datetime.now() for i in range(days_back): date_dt = today - timedelta(days=i) date_str = date_dt.strftime("%Y%m%d") try: df = ak.stock_intraday_sina(symbol=symbol, date=date_str) if not df.empty and 'price' in df.columns: print(f"✅ 找到最新有效数据日期: {date_dt.strftime('%Y-%m-%d')}") return date_dt.strftime("%Y-%m-%d"), date_str except: continue return None, None # 测试 latest_date, _ = get_latest_valid_date("sz002401") print(latest_date) ``` --- ## ✅ 总结与修复清单 | 问题 | 解决方案 | |------|----------| | `KeyError: 'ticktime'` | 接口未返回完整数据 | | 所有日期都失败 | 使用了未来日期 `2025-xx-xx` | | 函数崩溃 | 缺少对 `df.empty` 和列存在的判断 | | 用户体验差 | 应提示“请使用历史日期” | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值