ISP图像调优(支持工业相机)

关于一些音视频编解码的ISP相关的

目前比较熟悉海思系列的主控ISP,如果有这块的疑问,可以留言,给出一些想法,看看能否突破下, 只涉及相关主控ISP API调用和思路,不涉及到OpenCV或DSP图像算法的(因为我也不太熟悉)

关于线阵相机相关的

这块刚调完海康的线阵相机,效果还是不错的,仅提供相关的思路和API接口相关的,结构设计,补光设计, 装配等可讨论互相学习,如下为分辨率2048*1024的调试效果(某康型号MV-CL022-40GC, 2K网口线阵,彩色):
原始数据bmp比较大,有18M, 无法上传,截图如下:

*海康系列

链接: 海康线阵相机调试指导

*度申系列

在这里插入图片描述
相机参数:
在这里插入图片描述

代码块:

#include "rob_mvs_feature_tree.h"

/**
 *属性树
		备注:note部分依工具为主,xls中确认未更新。
 **/
FEATURE_TREE_S ft_info[FEATURE_TREE_OTHERS] = 
{

	{
		/*Feature*/
		"Device Control","设备控制",
			/*	名称					数据类型						访问模式			描述*/
		{
			{	 0, "DeviceType",					"IEnumeration",			"设备类型"},
			{	 1, "DeviceScanType",				"IEnumeration",			"设备sensor的扫描方式,表明是线阵相机还是面阵相机"},
			{	 2, "DeviceVendorName",			"IString",				"设备的制造商名称"},
			{	 3, "DeviceModelName", 			"IString", 				"设备型号"},
			{	 4, "DeviceManufacturerInfo",		"Istring", 				"设备的制造商信息"},
			{	 5, "DeviceVersion",				"IString ",	 			"设备版本"},
			{	 6, "DeviceFirmwareVersion",		"IString", 				"固件版本"},
			{	 7,"DeviceSerialNumber",			"IString", 				"设备序列号"},
			{	 8, "DeviceID",					"Istring", 				"设备ID"},
			{	 9, "DeviceUserID",				"IString", 				"用户自定义的名称"},
			{	10, "DeviceUptime",				"IInteger",				"设备运行时间"},
			{	11, "BoardDeviceType", 			"IInteger",				"设备类型"},
			{	12, "DeviceConnectionSelector",	"IInteger",				"设备连接选择"},
			{	13, "DeviceConnectionSpeed",		"IInteger",				"设备连接速度"},
			{	14, "DeviceConnectionStatus",		"IEnumeration",			"设备连接状态"},
			{	15, "DeviceLinkSelector",			"IInteger",				"设备连接选择"},
			{	16, "DeviceLinkSpeed", 			"IInteger",				"设备连接速度"},
			{	17, "DeviceLinkConnectionCount",	"IInteger",				"设备连接数量"},
			{	18, "DeviceLinkHeartbeatMode", 	"IEnumeration",			"是否需要心跳"},
			{	19, "DeviceLinkHeartbeatTimeout",	"IInteger",				"心跳超时时间"},
			{	20, "DeviceStreamChannelCount",	"IInteger",				"流通道数量"},
			{	21, "DeviceStreamChannelSelector", "IInteger",			"流通道选择"},
			{	22, "DeviceStreamChannelType", 	"IEnumeration",			"流通道类型"},
			{	23, "DeviceStreamChannelLink",	"IInteger",				"流通道连接数量"},
			{	24, "DeviceStreamChannelEndianness","IEnumeration",		"图像数据的字节序"},
			{	25, "DeviceStreamChannelPacketSize","IInteger",			"接收端流数据的包大小"},
			{	26, "DeviceEventChannelCount", 	"IInteger",				"设备支持的"},
			{	27, "DeviceCharacterSet",			"IEnumeration",			"设备寄存器中使用的字符集"},
			{	28, "DeviceReset", 				"ICommand",				"重启设备"},
			{   29, "DeviceTemperatureSelector",	"IEnumeration",			"选择某个部件温度测量"},
			{	30, "DeviceTemperature",			"IFloat",				"选中的设备部件温度"},
			{	31, "FindMe",						"ICommand",				"发现当前设备"},
			{	32, "DeviceMaxThroughput", 		"IInteger",				"设备最大吞吐量(带宽"},
		}
	},




	{
		"ImageFormatControl","图像格式控制",	/**/
		{
			{ 0, "WidthMax",									"IInteger",		"图像最大宽度,binning之后的数据"},
			{ 1, "HeightMax",									"IInteger",		"图像最大高度,binning之后的数据"},
			{ 2, "RegionSelector",							"IEnumeration",	"ROI选择器"},
			{ 3, "RegionDestination",							"IEnumeration",	"该ROI对应的码流"},
			{ 4, "Width",										"IInteger",		"ROI的宽"},
			{ 5, "Height",										"IInteger",		"ROI的高"},
			{ 6, "OffsetX",										"IInteger",		"ROI的水平方向偏移量"},
			{ 7, "OffsetY",										"IInteger",		"ROI的竖直方向偏移量"},
			{ 8, "ReverseX",									"IBoolean",		"是否需要水平翻转"},
			{ 9, "ReverseY",									"IBoolean",		"是否需要竖直翻转"},
			{10, "ReverseScanDirection",						"IBoolean",		"转换扫描方向"},
			{11, "PixelFormat",									"IEnumeration",	"图像像素格式,不同型号的相机,支持的像素格式有差异,以实际的为准"},
			{12, "PixelSize",									"IEnumeration",	"一个像素包含的比特数"},
			{13, "ImageCompressionMode",						"IEnumeration",	"图像压缩模式"},
			{14, "ImageCompressionQuality",						"IInteger",		"图像压缩质量"},
			{15, "TestPatternGeneratorSelector",				"IEnumeration",	"测试图像生成器选择"},
			{16, "TestPattern[TestPatternGeneratorSelector]",	"IEnumeration",	"测试图像选择"},
			{17, "BinningSelector ",							"IEnumeration",	"像素合并选择"},
			{18, "BinningHorizontal[BinningSelector]",			"IEnumeration",	"水平像素合并"},
			{19, "BinningVertical[BinningSelector]	",			"IEnumeration",	"垂直像素合并"},
			{20, "DecimationHorizontal",						"IEnumeration",	"水平像素采样"},
			{21, "DecimationVertical",							"IEnumeration",	"垂直像素采样"},
			{22, "Deinterlacing",								"IEnumeration",	"~"},
			{23, "FrameSpecInfoSelector",						"IEnumeration",	"水印信息选择"},
			{24, "FrameSpecInfo",								"IBoolean",		"是否使能该水印信息"},
		}
	},

	{
		"AcquisitionControl","采集控制",		/**/
		{
			{ 0, "AcquisitionMode",						"IEnumeration",	"采集模式,单帧、多帧、连续"},
			{ 1, "AcquisitionStart",					"ICommand",		"开始取流"},
			{ 2, "AcquisitionStop",						"ICommand",		"	结束取流"},
			{ 3, "AcquisitionBurstFrameCount",			"IInteger",		"	一次触发采集的帧数"},
			{ 4, "AcquisitionFrameRate",				"IFloat",		"Trigger Mode是off的时候该值生效"},
			{ 5, "AcquisitionFrameRateEnable",			"IBoolean",		"	设置的帧速率是否起效"},
			{ 6, "AcquisitionLineRate",					"IInteger",		"行频设置"},
			{ 7, "AcquisitionLineRateEnable",			"IBoolean",		"	行频控制使能"},
			{ 8, "ResultingLineRate",					"IInteger",		"实际行频"},
			{ 9, "ResultingFrameRate",					"IFloat",		"相机的实际采集帧率"},
			{10, "TriggerSelector",						"IEnumeration",	"触发事件选择"},
			{11, "TriggerMode[TriggerSelector]",		"IEnumeration",	"触发模式"},
			{12, "TriggerSoftware[TriggerSelector]",	"ICommand",	"	执行一次软触发"},
			{13, "TriggerSource[TriggerSelector]",		"IEnumeration",	"触发源"},
			{14, "TriggerActivation[TriggerSelector]",	"IEnumeration",	"触发上升沿、下降沿、高电平、低电平等"},
			{15, "TriggerDelay[TriggerSelector]",		"IFloat",		"触发延时"},
			{16, "TriggerCacheEnable",					"IBoolean",		"是否使能触发缓存"},
			{17, "SensorShutterMode",					"IEnumeration",	"设置传感器曝光模式"},
			{18, "ExposureMode",						"IEnumeration",	"曝光模式选择"},
			{19, "ExposureTime",						"IFloat",		"曝光时间"},
			{20, "ExposureAuto",						"IEnumeration",	"自动曝光"},
			{21, "AutoExposureTimeLowerLimit",			"IInteger",		"自动曝光下限"},
			{22, "AutoExposureTimeUpperLimit",			"IInteger",		"自动曝光上限"},
			{23, "GainShutPrior",						"IEnumeration",	"设置增益和曝光的优先级"},
			{24, "FrameTimeoutEnable",					"IBoolean",		"帧超时使能"},
			{25, "FrameTimeoutTime",					"IInteger",		"帧超时时间"},
			{26, "HDREnable	",							"IBoolean",		"是否使能宽动态"},
			{27, "HDRSelector",							"IInteger",		"HDR选择器"},
			{28, "HDRShuter",							"IInteger",		"HDR曝光值"},
			{29, "HDRGain",								"IFloat",		"HDR增益值"},
		}
	},


	{
		"DigitalIOControl", "数字IO控制",
		{
			{ 0, "LineSelector",				"IEnumeration",	"I/O选择"},
			{ 1, "LineMode[LineSelector]	",	"IEnumeration",	"I/O模式"},
			{ 2, "LineInverter[LineSelector]",	"IBoolean",		"I/O电平转换"},
			{ 3, "LineTermination ",			"IBoolean",		"I/O单端差分选择"},
			{ 4, "LineStatus[LineSelector]",	"IBoolean",		"I/O 状态"},
			{ 5, "LineStatusAll	",				"IInteger",		"所有I/O状态"},
			{ 6, "LineSource[LineSelector]","	IEnumeration",	"输出的事件源"},
			{ 7, "StrobeEnable",				"IBoolean",		""},
			{ 8, "LineDebouncerTime",			"IInteger",		"I/O去抖时间"},
			{ 9, "StrobeLineDuration",			"IInteger",		"输出电平持续时间,单位us"},
			{10, "StrobeLineDelay",				"IInteger",		"输出延时,单位us"},
			{11, "StrobeLinePreDelay",			"IInteger",		"预延时,单位us"},
		}
		
	},


	{
		"Counter And Timer Control","计数器和定时器控制",
		{
			{ 0, "CounterSelector ",					"IEnumeration",	"计数器选择"},
			{ 1, "CounterEventSource[CounterSelector]",	"IEnumeration",	"计数器事件源"},
			{ 2, "CounterResetSource[CounterSelector]",	"IEnumeration",	"计数器复位源"},
			{ 3, "CounterReset[CounterSelector]",		"ICommand",		"计数器复位"},
			{ 4, "CounterValue[CounterSelector]	",		"IInteger",		"计数器值"},
			{ 5, "CounterCurrentValue",					"IInteger",		"计数器当前值"},
		}
	},

	{
		"Analog Controls",  "模拟控制",
		{				
			{ 0, "Gain[GainSelector]",					"IFloat",		"增益值"},
			{ 1, "GainAuto[GainSelector]",				"IEnumeration",	"自动增益"},
			{ 2, "AutoGainLowerLimit",					"IFloat",		"自动增益下限"},
			{ 3, "AutoGainUpperLimit",					"IFloat",		"自动增益上限"},
			{ 4, "ADCGainEnable	",						"IBoolean",		"ADC 增益使能"},
			{ 5, "DigitalShift",						"IFloat",		"数字偏移调节"},
			{ 6, "DigitalShiftEnable",					"IBoolean",		"数字偏移使能"},
			{ 7, "Brightness",							"IInteger",		"亮度"},
			{ 8, "BlackLevel[BlackLevelSelector]",		"Iinteger",		"黑电平调节"},
			{ 9, "BlackLevelEnable",					"IBoolean",		"黑电平调节使能"},
			{10, "BlackLevelAuto[BlackLevelSelector]",	"IEnumeration",	"黑电平调节方式"},
			{11, "BalanceWhiteAuto",					"Ienumeration",	"自动白平衡"},
			{12, "BalanceRatioSelector",				"Ienumeration",	"白平衡比例选择"},
			{13, "BalanceRatio[BalanceRatioSelector]",	"Iinteger",		"白平衡值"},
			{14, "Gamma	",								"IFloat",		"伽马调节"},
			{15, "GammaSelector",						"Ienumeration",	"Gamma选择"},
			{16, "GammaEnable",							"IBoolean",		"Gamma使能"},
			{17, "Sharpness	",							"IInteger",		"图像锐度"},
			{18, "SharpnessEnable",						"IBoolean",		"启用/禁用锐度调节"},
			{19, "SharpnessAuto",						"IEnumeration",	"锐度自动调节类型"},
			{20, "Hue",									"IInteger",		"色度值调节"},
			{21, "HueEnable",							"IBoolean",		"色度使能"},
			{22, "HueAuto",								"IEnumeration",	"灰度自动调节类型"},
			{23, "Saturation",							"IInteger",		"饱和度值调节"},
			{24, "SaturationEnable",					"IBoolean",		"饱和度使能"},
			{25, "SaturationAuto",						"IEnumeration",	"饱和度自动调节类型"},
			{26, "DigitalNoiseReductionMode",			"IEnumeration",	"数字降噪等级选择"},
			{27, "NoiseReduction",						"IInteger",		"降噪值"},
			{28, "AirspaceNoiseReduction",				"IInteger",		"空域降噪"},
			{29, "TemporalNoiseReduction",				"IInteger",		"时域降噪"},
			{30, "AutoFunctionAOISelector",				"IEnumeration",	"自动AOI选择"},
			{31, "AutoFunctionAOIWidth",				"IInteger",		"自动AOI宽"},
			{32, "AutoFunctionAOIHeight",				"IInteger",		"自动AOI高"},
			{33, "AutoFunctionAOIOffsetX",				"IInteger",		"自动AOI水平方向偏移"},
			{34, "AutoFunctionAOIOffsetY",				"IInteger",		"自动AOI竖直方向偏移"},
			{35, "AutoFunctionAOIUsageIntensity",		"IBoolean",		"根据AOI区域自动曝光"},
			{36, "AutoFunctionAOIUsageWhiteBalance",	"IBoolean",		"根据AOI区域自动白平衡"},
		}
	},

	{
		"LUT Control", "显示查找表控制",
		{
			{ 0, "LUTSelector",						"IEnumeration",	"亮度、R\G\B"},
			{ 1, "LUTEnable[LUTSelector]",			"IBoolean",		"使能"},
			{ 2, "LUTIndex[LUTSelector]",			"IInteger",		"索引号"},
			{ 3, "LUTValue[LUTSelector][LUTIndex]",	"IInteger",		"值"},
			{ 4, "LUTValueAll[LUTSelector]",		"Register",		"LUT所有的值"},
		}		
		
	},

	{
		"EncoderControl", "编码器控制",
		{
			{ 0, "EncoderSelector",				"IEnumeration",	"编码器选择"},
			{ 1, "EncoderSourceA",				"IEnumeration",	"编码器A源选择"},
			{ 2, "EncoderSourceB",				"IEnumeration",	"编码器B源选择"},
			{ 3, "EncoderTriggerMode",			"IEnumeration",	"编码器触发模式"},
			{ 4, "EncoderCounterMode",			"IEnumeration",	"编码器计数模式"},
			{ 5, "EncoderCounter",				"IInteger",		"编码器计数器值调节"},
			{ 6, "EncoderCounterMax",			"IInteger",		"编码器计数器最大值"},
			{ 7, "EncoderCounterReset",			"ICommand",		"编码器计数器复位"},
			{ 8, "EncoderMaxReverseCounter",	"IInteger",		"编码器最大反转计数器值"},
			{ 9, "EncoderReverseCounterReset",	"ICommand",		"编码器反转计数器复位"},
		}		
		
	},

	{
		"FrequencyConverterControl", "变频器控制",
		{
			{ 0, "InputSource",		"IEnumeration",	"分频器输入源"},
			{ 1, "SignalAlignment",	"IEnumeration",	"分频器信号方向"},
			{ 2, "PreDivider",		"IInteger",		"前置分频器调节"},
			{ 3, "Multiplier",		"IInteger",		"倍频器调节"},
			{ 4, "PostDivider",		"IInteger",		"后置分频器调节"},
		}		
		
	},

	{
		"ShadingCorrection", "阴影矫正",
		{
			{ 0, "ShadingSelector",	"IEnumeration",	"明暗场校正选择"},
			{ 1, "ActivateShading",	"ICommand",		"主动校正"},
			{ 2, "NUCEnable",		"IBoolean",		"NUC使能开关"},
			{ 3, "FPNCEnable",		"IBoolean",		"FPNC状态开关"},
			{ 4, "PRNUCEnable",		"IBoolean",		"PRNUC状态开关"},
		}		
		
	},

	{
		"User Set Control", "用户集控制",
		{
			{ 0, "UserSetCurrent",				"IInteger",		"当前用户参数"},
			{ 1, "UserSetSelector",				"IEnumeration",	"设置载入的参数"},
			{ 2, "UserSetLoad[UserSetSelector]","ICommand",		"加载"},
			{ 3, "UserSetSave[UserSetSelector]","ICommand",		"用户参数保存"},
			{ 4, "UserSetDefault",				"IEnumeration",	"默认状态"},
		}				
		
	},

	{
		"Transport Layer Control", "传输层控制",
		{
			{ 0, "PayloadSize",													"IInteger",		"一帧数据的大小"},
			{ 1, "GevVersionMajor",												"IInteger",		"GEV主版本号"},
			{ 2, "GevVersionMinor",												"IInteger",		"GEV子版本号"},
			{ 3, "GevDeviceModeIsBigEndian",									"IBoolean",		"大端"},
			{ 4, "GevDeviceModeCharacterSet",									"IEnumeration",	"字符集"},
			{ 5, "GevInterfaceSelector",										"IInteger",		"GEV接口数"},
			{ 6, "GevMACAddress",												"IInteger",		"MAC地址"},
			{ 7, "GevSupportedOptionSelector",									"IEnumeration",	"相机可以支持的功能选项"},
			{ 8, "GevSupportedOption[GevSupportedOptionSelector]",				"IBoolean",		"相机是否支持Selector 选择的功能"},
			{ 9, "GevCurrentIPConfigurationLLA",								"IBoolean",		"IP是否为LLA"},
			{10, "GevCurrentIPConfigurationDHCP[GevInterfaceSelector]",			" IBoolean",	"IP是否为DHCP"},
			{11, "GevCurrentIPConfigurationPersistentIP[GevInterfaceSelector]",	" IBoolean",	"IP是否为静态IP"},
			{12, "GevPAUSEFrameReception[GevInterfaceSelector]",				"IBoolean",		"控制PAUSE帧是否开启"},
			{13, "GevCurrentIPAddress[GevInterfaceSelector]",					"IInteger",		"IP地址"},
			{14, "GevCurrentSubnetMask[GevInterfaceSelector]",					"IInteger",		"子网掩码"},
			{15, "GevCurrentDefaultGateway[GevInterfaceSelector]",				"IInteger",		"默认网关"},
			{16, "GevFirstURL",													"IString",		"XML第一选择路径"},
			{17, "GevSecondURL",												"IString",		"XML第二选择路径"},
			{18, "GevNumberOfInterfaces",										"IInteger",		"GEV接口数"},
			{19, "GevPersistentIPAddress[GevInterfaceSelector]",				"IInteger",		"静态IP地址"},
			{20, "GevPersistentSubnetMask[GevInterfaceSelector]",				"IInteger",		"静态子网掩码"},
			{21, "GevPersistentDefaultGateway[GevInterfaceSelector]",			"IInteger",		"静态默认网关"},
			{22, "GevLinkSpeed",												"IInteger",		"网络速率"},
			{23, "GevMessageChannelCount",										"IInteger",		"消息通道数"},
			{24, "GevStreamChannelCount",										"IInteger",		"流通道"},
			{25, "GevHeartbeatTimeout",											"IInteger",		"心跳超时时间"},
			{26, "GevGVCPHeartbeatDisable",										"IBoolean",		"关闭心跳"},
			{27, "GevTimestampTickFrequency",									"IInteger",		"时间戳频率"},
			{28, "GevTimestampControlLatch",									"ICommand",		"获取时间戳"},
			{29, "GevTimestampControlReset",									"ICommand",		"复位时间戳"},
			{30, "GevTimestampControlLatchReset",								"ICommand",		"复位时间戳同时获取时间戳"},
			{31, "GevTimestampValue",											"IInteger",		"时间戳值"},
			{32, "GevCCP",														"IEnumeration",	"App端的控制权限"},
			{33, "GevStreamChannelSelector",									"IInteger",		"流通道选择"},
			{34, "GevSCPInterfaceIndex[GevStreamChannelSelector]",				"IInteger",		"GEV接口索引"},
			{35, "GevSCPHostPort[GevStreamChannelSelector]",					"IInteger",		"主机端口"},
			{36, "GevSCPDirectionGevStreamChannelSelector]",					"IInteger",		"表明流通道方向"},
			{37, "GevSCPSFireTestPacket[GevStreamChannelSelector]",				"IBoolean",		"Fire Test Packet使能"},
			{38, "GevSCPSDoNotFragment[GevStreamChannelSelector]",				"IBoolean",		"Fire Test Packet使能"},
			{39, "GevSCPSBigEndian[GevStreamChannelSelector]",					"IBoolean",		"流数据大小端"},
			{40, "PacketUnorderSupport",										"IBoolean",		"是否支持GVSP包乱序发送"},
			{41, "GevSCPSPacketSize",											"IInteger",		"网络包大小"},
			{42, "GevSCPD[GevStreamChannelSelector]",							"IInteger",		"发包延时"},
			{43, "GevSCDA[GevStreamChannelSelector]",							"IInteger",		"流数据的目的地址"},
			{44, "GevSCSP[GevStreamChannelSelector]",							"IInteger",		"流数据的源端口"},
			{45, "TLParamsLocked",												"IInteger",		"取流时为1"}
		}
	}
} ;




关于面阵相机相关的

暂未接触过面阵相机这块,后续如有接触,会做更新。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值