我是新的OpenCV,我期待融合两幅图像(全色和多光谱)使用OpenCV和C++。请注意,我已经注册了参考图像,现在我只需要融合引用和感测图像。我找不到任何功能可以帮我做这件事。我是错过了什么,还是没有直接的方法融合两个图像?请提出任何简单的方法来进行融合过程。
发布于 2016-03-07 11:08:10
由于您正在尝试将全色图像和多光谱图像融合在一起,因此您需要:
。
cvtColor(ref, tmp1, CV_BGR2GRAY, 0);
cvtColor(trans, tmp2, CV_BGR2GRAY, 0);
cv::Mat yuv;
cvtColor(ref, yuv, CV_BGR2YUV, 3);
vector <Mat> channels_ref;
split(yuv, channels_ref);
double alpha = 0.3;
double beta = 1 - alpha;
addWeighted(tmp1, alpha, tmp2, beta, 0.0, channels_ref[0]);
Mat merge[] = {channels_ref[0], channels_ref[1], channels_ref[2]};
cv::merge(merge, 3, output);
cvtColor(output, output, CV_YUV2BGR);
imshow("Linear Blend", output);
waitKey(0);
发布于 2016-12-07 13:39:55
过了很长一段时间,我重新讨论了这个问题,并决定试一试,因为以前没有样品图像。同时,我也产生了一些--稍后再看。
所以,假设你有一个高分辨率的全色图像,像这样的10m分辨率:
一幅分辨率为40m的多光谱图像,像这样:
然后,现在只在命令行使用ImageMagick (因为它安装在大多数Linux发行版上,并且可用于OSX和Windows),请执行我在您原来问题下的注释中提到的内容.
convert hi-res-panchromatic.tif \
\( lo-res-multispectral.tif -resize 400% -colorspace Lab -separate -delete 0 \) \
-set colorspace Lab -combine result.tif
那上面说..。“加载高分辨率图像。然后,向一边加载lo图像,并将其放大到400%,以达到40m分辨率,而不是10m分辨率,并将其转换到LabCol色空间并分离通道。删除lo图像的轻型(L
)通道.现在,从次要处理返回到主要处理,我们将有高分辨率图像,我们首先加载作为L
通道和ab
通道(即颜色信息)的lo-res图像。将它们从Lab合并回RGB并保存“。
我看到你已经一年没有登录了,所以我会推迟任何OpenCV代码的编写,直到其他人对这个问题表示出兴趣,但我希望这个技术是可以理解的。
Note
由于我没有任何地理注册全色和多光谱图像在同一地方,我欺骗了一些.我拍摄了一张图像,并使用ImageMagick合成了一个全色版本。
convert orig.tif -colorspace gray hi-res-panchromatic.tif
我用以下方法合成了lo-res多光谱图像:
convert orig.tif -resize 25% lo-res-multispectral.tif
另外,请注意,我只是在这里使用Lab
模式来进行混合,因为它更简单,但是在我建议使用主成分分析的注释中。我可能会再看一遍,也能实现.
https://stackoverflow.com/questions/28042224
复制相似问题