【ChatGPT+Python】Landsat卫星图像黑边去云及旋转校正

引言

下图是一张Landsat图像的示例(右图)。我们可以明显地看到四周的黑边和倾斜的角度。这是由于卫星传感器成像导致的。一般情况下,我们是不需要去除黑边和选择的,因为这样做之后投影信息和位置信息就不正确了。但对于做深度学习图像处理任务的同学来说,可能不需要考虑此类约束。因此,出于节省存储和内存的考虑,借助ChatGPT直接帮助我们生成了黑边去云及旋转校正的Python代码,最终效果如左图。

在这里插入图片描述

代码

Prompt: 现有一RGB彩色图像,图像内仅有一个旋转的矩形物体,其周围的像素值全是0,要求裁剪出其中的矩形物体,并将其旋转校正,注意矩形物体的边界也可能有值为0的像素,输出结果保存为彩色图像。使用Python实现。

  • 安装依赖
pip install opencv-python numpy
  • 算法流程
  1. 读取图像
  2. 转换为灰度图像,然后通过阈值化操作将所有非零像素转换为白色(255),所有零像素保持为黑色(0)。
  3. 使用OpenCV的findContours方法找到最大的轮廓,这应该是你的矩形物体。
  4. 使用minAreaRect获取轮廓的最小外接矩形(包括旋转角度)。
  5. 通过旋转原始图像将矩形校正。
  6. 裁剪并保存结果图像。
  • 黑边去除及旋转校正的代码如下:
import cv2
import numpy as np# 1. 读取图像
img = cv2.imread('input.jpg')# 2. 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 3. 找到最大的轮廓
_, thresh = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = max(contours, key=cv2.contourArea)# 4. 获取最小外接矩形
rect = cv2.minAreaRect(contour)
box = cv2.boxPoints(rect)
box = np.int0(box)# 5. 旋转原始图像以校正矩形
width = int(rect[1][0])
height = int(rect[1][1])
src_pts = box.astype("float32")
dst_pts = np.array([[0, height-1],[0, 0],[width-1, 0],[width-1, height-1]], dtype="float32")
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warped = cv2.warpPerspective(img, M, (width, height))# 6. 显示中间过程(用于可解释性研究)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.imshow('edge', img)
cv2.waitKey(0)
cv2.destroyAllWindows()# 7. 裁剪并保存结果图像
output = warped[0:height, 0:width]
cv2.imwrite('output.jpg', output)

以上代码首先读取图像,并通过二值化将图像分割成背景和物体。然后找到物体的外接矩形,使用仿射变换将物体旋转到水平位置,最后对旋转后的图像进行裁剪。

但请注意,对于非常复杂或噪声很大的图像,这种方法可能不适用。你可能需要对图像进行更多的预处理,比如滤波、形态学操作等等。

实验

表1:边缘(轮廓)检测方法采用不同函数的对比结果

在这里插入图片描述

拓展

上述代码不仅对于Landsat卫星图像有效,对于普通的图像(周围是黑色填充,内接一个矩形物体)也同样有效。下面给出一个演示结果。

在这里插入图片描述

此外,上述代码中寻找最大轮廓除使用 cv2.findContours() 函数外,也可以使用如下方式替代,只不过代码的执行时间会变长,但是鲁棒性会更好,即抗噪声等干扰的能力强。

import cv2
import numpy as np# 1. 读取图像
img = cv2.imread('input.jpg')# 2. 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 3. 找到最大的轮廓
# 使用Canny边缘检测算法检测图像中的边缘
edges = cv2.Canny(gray, 50, 150, apertureSize=3)# 使用霍夫变换检测图像中的直线
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)# 获取检测到的直线中最长的一条
longest_line = None
max_length = 0for line in lines:for rho, theta in line:a = np.cos(theta)b = np.sin(theta)x0 = a*rhoy0 = b*rhox1 = int(x0 + 1000*(-b))y1 = int(y0 + 1000*(a))x2 = int(x0 - 1000*(-b))y2 = int(y0 - 1000*(a))length = np.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))if length > max_length:max_length = lengthlongest_line = line# 获取直线的端点坐标
for rho, theta in longest_line:a = np.cos(theta)b = np.sin(theta)x0 = a*rhoy0 = b*rhox1 = int(x0 + 1000*(-b))y1 = int(y0 + 1000*(a))x2 = int(x0 - 1000*(-b))y2 = int(y0 - 1000*(a))# 计算直线的角度
angle = np.arctan2(y2-y1, x2-x1) * 180 / np.pi# 4. 获取最小外接矩形
h, w = img.shape[:2]
rect = cv2.minAreaRect(np.array([(x, y) for x in range(w) for y in range(h) if edges[y, x] > 0]))
box = cv2.boxPoints(rect)
box = np.int0(box)# 5. 旋转原始图像以校正矩形
width = int(rect[1][0])
height = int(rect[1][1])
src_pts = box.astype("float32")
dst_pts = np.array([[0, height-1],[0, 0],[width-1, 0],[width-1, height-1]], dtype="float32")
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warped = cv2.warpPerspective(img, M, (width, height))# 6. 显示中间过程(用于可解释性研究)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.imshow('edge', img)
cv2.waitKey(0)
cv2.destroyAllWindows()# 7. 裁剪并保存结果图像
output = warped[0:height, 0:width]
cv2.imwrite('output.jpg', output)

注意

Landsat的遥感影像四个角有黑色区域,这是正常的。表明那个黑色区的地方没有数据,在实际应用中也不需要去掉四个角的黑色区域。一般我们使用shp矢量量面来对遥感影像进行剪裁,提取出我们所需要研究或者显示的区域就可以啦。但是如果你真的想去掉黑色区域的话,你可以使用重分类,把黑色的区域变成白色,这样和背景就一致了,在发布服务的时候设为白色透明就可以了。还一个问题,Landsat8遥感影像是具有准确的投影坐标系的。倾斜是因为在卫星扫描的时候就是这个样子,拿到的影像是由准确的地理坐标的,不能够把它给旋转正了。旋转正了的话,它的投影信息和位置信息就不正确了,如果感觉不好看,可以直接剪裁出来正方形,或者把相邻的影像进行拼接,然后再剪裁。

参考

https://www.zhihu.com/question/497775240/answer/2216988184

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13867.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI聊天机器人公司Character获1.5亿美元 公司估值10亿美元

雷递网 乐天 3月24日 AI聊天机器人初创公司Character.AI日前宣布完成1.5亿美元,估值为10亿美元,领投方为Andreessen Horowitz。 Character.AI计划将使用这笔资金来训练其自建模型并扩充22人的团队。 Character.AI由前谷歌研究人员 Noam Shazeer 和 Danie…

“AI产品经理大本营”六周年活动明天开启!(最后的优惠价格窗口+三大内容产品发布)...

明天(5月9日,周二),将开启咱们社群“AI产品经理大本营”六周年活动——“AI产品经理的新起点 2.0”! 下面将介绍三个方面: 1、“AI产品经理大本营”的三大会员权益体系(价值XXXX元) …

AI绘图软件分享:Midjourney 基础教程(一)

大家伙,我是权知星球,今天跟大家分享一下最近AI绘图爆火的软件工具Midjourney的使用教程。 Midjourney基础教程(⼀):Midjourney 使⽤准备 Midjourney是⼀个AI绘画⼯具,可以使⽤⽂字描述,⽣成…

阿愚呱呱作为一个非技术人员,是如何做到不到3年时间成为RPA行业的一个头部IP的?

Part1RPA帮入门训练营操作手册(问题集锦) 1禁用edge浏览器再重启 1.winR (win是键盘最左边Ctrl和Alt之间的按键) 2.输入msconfig 3.启动 4.打开任务管理器 5.选中edge浏览器 6.点击禁用 7.重启 2注册并下载uibot https://www.uibot.com.cn/ 3谷歌浏览器下…

“AI信息/认知”领先时间窗,可达2年?3个例证及12月的57篇精华汇总 | 星球月报...

最近被朋友敲打了下,酒香也怕巷子深,他建议的对…… 之前也有同学私下说,咱们星球“AI产品经理大本营”的日更AI干货,不仅是节省时间,更有体会到“圈内人”的感觉。 我后来汇总过,“AI信息/认知”领先外部时…

韭菜GPT:「旧世界」的开发者们,给OpenAI上了一课

OpenAI 官方 app ChatGPT 上架美区 App Store,一夜之间登顶 App Store 免费榜。 据 Sensor Tower 的数据,5 月 19 日当天,ChatGPT 收入排名生产力榜单第 4 名,App Store 总榜第 94 名。 可想而知,这个数据在未来一段时…

微软赢疯了,Office AI工具定价破天花板,每人每月30美元!

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) AI 的尽头,莫非是付费订阅? 昨天,微软在全球合作伙伴大会上披露,Microsoft 365 Copilot 将统一定价为每个用户 30 美元/月(约…

上云一年烧掉320万美元,Ruby on Rails 之父:“下云”成功,五年能省700万美元!...

高达320万美元一年的云计算费用,这家公司选择“下云”后,CTO 粗略算了一下,每年至少能节省一百五十万美元。即使预留 50 万美元用于意外开支,5 年也能节省 700 万美元的费用。 整理 | 梦依丹 出品 | CSDN(ID&#xff…

ofo小黄车已彻底无法登录;初代 iPhone 拍出 6.3 万美元天价;Linux 6.3 合并了硬件噪声工具|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…

谷歌不跟 ChatGPT 的风,为什么?梦幻AI头像生成,你玩了没?氮化铌或让未来个人电脑量子化...

本周,AI业界有哪些新鲜事? 产业界 GitHub Copilot 推出企业版,但侵权等问题还需解决 根据GitHub近日发布的一份新闻稿:"我们很高兴为企业带来GitHub Copilot,它具有简单而灵活的许可管理、组织范围内的策略控制和…

在ChatGPT中建立一个虚拟机

内容部分翻译自:https://www.engraved.blog/building-a-virtual-machine-inside/ 除非你一直生活在岩石下,否则你已经听说过OpenAI开发的这个新的ChatGPT助手。你可能知道它在解决智商测试、解决leetcode问题或帮助人们写LateX方面的能力。它是人们检索…

ChatGPT对健康医疗意味着什么?

ChatGPT可能是有史以来增长最快的消费者互联网应用程序。OpenAI开发的人工智能聊天机器人于11月推出,仅两个月就达到了1亿用户。它空前的流行可归因于其令人印象深刻的功能。 ChatGPT可以做什么,为什么如此受欢迎? 人工智能曾经是科幻小说中…

我问了鹅厂程序员:你们工作中怎么用ChatGPT?如何高效Prompt?

👉腾小云导读 当你还在错误使用对话 AI 工具如 GPT,可能会觉得其作用不过是知识平移总结或简单问答。实际上,当了解先进的用法、知悉如何做到 better prompt,你会发现:AI 不是来替代你的,是来帮助你更好工作…

[Claude]-Chatgpt最强对手来袭

Chatgpt最强对手来袭 这货名叫Claude,是由openai前员工创建的,对标chatgpt,且响应速度要比chatgpt免费版好很多。最近,Claude 突然开放了申请,并且更新支持中文。据说它的 API 仍然是那种不限量、免费的类型哦~ 尽管如…

chatgpt赋能python:Python编程教程:如何用Python写抢购程序

Python编程教程:如何用Python写抢购程序 随着网购的流行和限量商品的推出,抢购已经成为了一个非常热门的话题。有些人甚至会通过软件或程序来提高他们成功抢到商品的机会。在本篇文章中,我们将介绍如何用Python编写一个简单易用的抢购程序&a…

ChatGPT突破安全边界

如同 ChatGPT 这样强大的 AI 能否被破解,让我们看看它背后的规则,甚至让它说出更多的东西呢? 回答是肯定的。2021 年 9 月,数据科学家 Riley Goodside 发现,他可以通过一直向 GPT-3 说,「Ignore the above …

POE:性价比最高的 AI 整合网站

创作不易,如果本文对你有帮助,胖友记得一键三连 😭。更多 AI 优质内容推荐请关注主页 “AI” 专栏,笔者会不定期更新觉得自己用下来还不错的 AI 相关产品。 1.介绍 Poe 是一款同时整合了 ChatGPT、Sage、GPT-4、Claude、Claude-in…

从BERT到ChatGPT,北航等9大顶尖研究机构全面综述:那些年一起追过的「预训练基础模型」...

来源:新智元 【导读】2023年了,还有人从头开始训模型吗?追踪一下从Bert以来的那些预训练模型。 ChatGPT在few-shot和zero-shot场景下展现出的惊人性能,让研究人员们更坚定「预训练」是一条正确的路线。 预训练基础模型&#xff08…

从BERT到ChatGPT!97页全面综述:那些年一起追过的预训练基础模型

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自:新智元 | 编辑:LRS 【导读】2023年了,还有人从头开始训模型吗?追踪一下从Bert以来的那些…

城市公交查询系统

文档 代码压缩包 摘要 出行是人类生活的基本活动之一。城市的快速发展、科技的发展以及环保意识的增强,对城市公共交通的发展趋势的快速性、舒适性、便捷性、环保等方面提出更高要求。先进的信息技术也促进了公共交通技术的发展,从而为乘客提供了良好的…