参考了网上不少RGB到HSI转换代码
https://blog.csdn.net/qq_38328871/article/details/85060459
https://blog.csdn.net/qq_30091945/article/details/78236347
https://blog.csdn.net/lwplwf/article/details/77494072
但直接跑起来,效率比较低,原因是用了循环。毕竟是Python,效率不能和C/C++相比。用numpy数组计算效率提高很多。公式参考其他博客,这里不写了,直接贴代码
import numpy as np
import tifffile
import cv2
from matplotlib import pyplot as plt
def Normalize(band):
res = (band - np.min(band)) / (np.max(band) - np.min(band))
return res
def rgb2hsi_np(R, G, B):
# 波段归一化
B = Normalize(B)
G = Normalize(G)
R = Normalize(R)
rows = B.shape[0]
cols = B.shape[1]
H = np.zeros((rows, cols)) #H通道
I = (R + G + B) / 3.0 #I通道
S = np.zeros((rows, cols)) #S通道
den = np.sqrt((R-G)**2 + (R-B)*(G-B))
thetha = np.arccos(0.5*(R-B+R-G)/den)
h = np.zeros((rows, cols))
h[B<=G] = thetha[B<=G]
h[G<B] = 2*np.pi-thetha[G<B]
h[den==0] = 0
H = h/(2*np.pi)
stack = np.stack([R,G,B])
S = 1 - 3*np.min(stack, axis=0)/np.sum(stack, axis=0)
S[(R+B+G) == 0] = 0
return H, S, I
测试用的Lena图下载地址http://www.ece.rice.edu/~wakin/images/
rgb = tifffile.imread("./lena512color.tiff")
plt.subplots(1, 3, figsize=(10,10))
plt.subplot(1, 3, 1)
plt.title("RGB")
plt.imshow(rgb)
R, G, B = cv2.split(rgb)
H, S, I = rgb2hsi_np(R, G, B)
hsi = np.zeros((B.shape[0],B.shape[1], 3))
hsi[:,:,0] = H * 255
hsi[:,:,1] = S * 255
hsi[:,:,2] = I * 255
hsi = hsi.astype(np.uint8)
plt.subplot(1, 3, 2)
plt.title("HSI")
plt.imshow(hsi)
hsi[:,:,2] = H * 255
hsi[:,:,1] = S * 255
hsi[:,:,0] = I * 255
plt.subplot(1, 3, 3)
plt.title("HSI reverse")
plt.imshow(hsi)
结果
参考结果
https://www.cnblogs.com/faith0217/articles/4264652.html
完全背包问题。整个数据操作的
eclipse启动Tomcat服务输入http://localhost:8080/报404解决方法其实如果Tomcat能够正常启动,而就算输入http://localhost:8080时出现404错误,也不会影响Tomcat作为服务器运行。通过eclipse来启动tomcat会碰到“访问http://localhost:8080出现404错误”这样的问题,需要在eclipse中进行一系列的设置才行
一、安装go语言go语言支持多平台的操作系统go的官网地址为:https://golang.org国内地址为:https://golang.google.cn下载对应的安装包,接下来进行安装1. UNIX/Linux 安装以下是使用二进制安装文件的安装方式# 解压安装包tar -zxvf go1.16.5.linux-arm64.tar.gz# 将安装包移到系统目录sudo mv go /usr/local设置环境变量,使用sudo vim /etc/profile打开系统prof
I am currenlty working on a project which relies on a couple of mathematical/statistical/financial tools which I would ideally like to include in one (perhaps several) libraries. What I would like to ..._java 金融类库
前言自定义View在Android中使用非常普遍,实现复杂的效果,其代码也比较多,所以就需要我们将View中绘制和逻辑控制进行提取和封装,使我们的代码更加清晰简洁。 这里以绘制一个文本,并实现跑马灯效果为例来展示一下。展示这里我们写一个BaseView继承View:import android.content.Context;import android.graphics.Canvas;imp
设计模式的目的软件编写过程中,程序员面临者来自:耦合性、内聚性(高内聚、低耦合)可维护性可扩展性(当需要增加新的功能时,非常的方便,成为可维护性)重用性(相同代码不用多次编写)灵活性可读性(编程规范性,便于其他程序员的阅读和理解)等等多方面的挑战,设计模式就是为了让程序具有更好的上面这些性质。另外之前听一个设计模式相关的视频,老师讲了两个金句:设计模式包含了面向对象的精髓..._设计模式、设计规则
那些脑洞大开的“现实黑客”——这些故事你尽管听,不奇葩算我输!人们谈到黑客,脑海里下意识浮现的是两极分化的两种形象,一种顶配的黑客是基努·里维斯在《黑客帝国》里的经典造型,背头黑超长风衣,王霸之气侧漏,酷炫到没朋友;另一种则大门不出二门不迈,窝在沙发里,挂在电脑上,透过反光的镜片远程操控别人的电脑,可以是网络世界中的顶级刺客,也可以蜗居在家的邋遢宅男。事实上,这些刻板...
Linux下NFS服务器的配置类型:System V-launched Service软件包:nfs-utils进程:nfsd,lockd,rpciod,rpc.{mounted,rquotad,statd}脚本:nfs,nfslock端口:由portmap服务指派端口(111) 配置文件:/etc/exports 辅助工具:portmap(必须)相关命令:rp_/etc/rc.d/init.d/portmap start
一、单表查询的语法二、关键字的执行优先级(重点)三、单表查询示例1.where约束2.group by分组查询3.聚合函数4.HAVING过滤5.order by查询排序6.limit 限制查询的记录数一、单表查询的语法SELECT 字段1,字段2... FROM 表名 WHERE 条件 ..._mysql创建一张teacher表 包含 id(int) name(varchar) sal(int)薪水, sex(varchar)
Eclipse常用快捷键1几个最重要的快捷键代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2显示搜索对话框:Ctrl+H快速Outline:Ctrl+O打开资源:Ctrl+Shift+R打开类型:Ctrl+Shift+T显示重构菜单:Alt+Shift+T上一个/下一个光标的位...
基于STM32的简易示波器的UCOSII嵌入式操作系统的实现_示波器操作系统
模仿UnityScene模式下开发者对相机的基础操作方式就一个脚本挂相机上就行了。Demo资源点这里/***************************************************** 文件:CameraControl.cs 版本:01 作者:GZL 功能:相机旋转拖拽移动缩放*****************************************************/using System.Collections;usin