编写差分图像一维直方图提取函数另存为 Histo_DiffImage.m 文件;编写 差 分 图 像 二 维 直 方 图 提 取 函 数 ( double_Histo_DiffImage ), 另 存 为 double_Histo_DiffImage.m 文件。
时间: 2023-04-10 07:00:28 浏览: 93
我可以回答这个问题。编写差分图像一维直方图提取函数可以使用MATLAB中的imabsdiff函数计算两幅图像的差分图像,然后使用imhist函数计算差分图像的一维直方图。编写差分图像二维直方图提取函数可以使用MATLAB中的hist3函数计算差分图像的二维直方图。具体实现可以参考MATLAB的官方文档。
相关问题
按照以下代码编写vs2010版本的所需要的头文件#include<opencv2/core.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> #include<iostream> using namespace std; using namespace cv; //创建灰度图像的直方图 class Histogram1D { private: int histSize[1];//直方图中箱子的数量 float hranges[2];//值范围 const float* ranges[1];//值范围的指针 int channels[1];//要检查的通道数量 public: Histogram1D() { //准备一维直方图的默认参数 histSize[0] = 256;//256个箱子 hranges[0] = 0.0;//从0开始(含) hranges[1] = 256.0;//到256(不含) ranges[0] = hranges; channels[0] = 0;//先关注通道0 } cv::Mat getHistogram(const cv::Mat& image); }; //计算一维直方图 cv::Mat Histogram1D::getHistogram(const cv::Mat& image) { cv::Mat hist; //用calcHist函数计算一维直方图 cv::calcHist(&image, 1, //仅为一幅图像的直方图 channels, //使用的通道 cv::Mat(), //不使用掩码 hist, //作为结果的直方图 1, //这是一维的直方图 histSize, //箱子数量 ranges //像素值的范围 ); return hist; } int main() { //读取输入的图像 cv::Mat image = cv::imread("girl.jpg", 0);//以黑白方式打开 //直方图对象 Histogram1D h; //计算直方图 cv::Mat histo = h.getHistogram(image); //循环遍历每个箱子 for (int i = 0; i < 256; i++) cout << "Value" << i << "=" << histo.at<float>(i) << endl; }
以下是按照所给代码编写的vs2010版本所需要的头文件:
```c++
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
//创建灰度图像的直方图
class Histogram1D
{
private:
int histSize[1];//直方图中箱子的数量
float hranges[2];//值范围
const float* ranges[1];//值范围的指针
int channels[1];//要检查的通道数量
public:
Histogram1D()
{
//准备一维直方图的默认参数
histSize[0] = 256;//256个箱子
hranges[0] = 0.0;//从0开始(含)
hranges[1] = 256.0;//到256(不含)
ranges[0] = hranges;
channels[0] = 0;//先关注通道0
}
cv::Mat getHistogram(const cv::Mat& image);
};
//计算一维直方图
cv::Mat Histogram1D::getHistogram(const cv::Mat& image)
{
cv::Mat hist;
//用calcHist函数计算一维直方图
cv::calcHist(&image, 1, //仅为一幅图像的直方图
channels, //使用的通道
cv::Mat(), //不使用掩码
hist, //作为结果的直方图
1, //这是一维的直方图
histSize, //箱子数量
ranges //像素值的范围
);
return hist;
}
int main()
{
//读取输入的图像
cv::Mat image = cv::imread("girl.jpg", 0);//以黑白方式打开
//直方图对象
Histogram1D h;
//计算直方图
cv::Mat histo = h.getHistogram(image);
//循环遍历每个箱子
for (int i = 0; i < 256; i++)
cout << "Value" << i << "="
<< histo.at<float>(i) << endl;
return 0;
}
```
需要注意的是,以上代码中的图片文件girl.jpg需要放置在与源代码文件相同的目录下,否则需要指定正确的图片路径。
用Matlab实现读取img2.tif图像,绘制其直方图和概率直方图,并进行直方图均衡操作。 提示:imhist 函数提取直方图信息, stem函数绘制直方图,histeq 函数用于直方图均衡
在MATLAB中,要读取名为"img2.tif"的图像并完成上述操作,你可以按照以下步骤进行:
1. **加载图像**:
首先,使用`imread`函数从TIFF文件中读取图像数据:
```matlab
img = imread('img2.tif');
```
2. **查看和确认图像**:
可以通过`imshow`函数查看原始图像:
```matlab
imshow(img);
```
3. **提取直方图**:
使用`imhist`函数获取灰度值的直方图信息:
```matlab
histo = imhist(img(:), 256); % 创建一个256-bin的直方图
```
4. **绘制直方图**:
`stem`函数用于绘制直方图,可以显示每个灰度级出现的频率:
```matlab
stem(histo);
xlabel('灰度级别');
ylabel('频率');
title('原图像直方图');
```
5. **绘制概率直方图**:
转换直方图为概率分布,即每行元素之和为1:
```matlab
probHisto = histo / sum(histo);
stem(probHisto);
xlabel('灰度级别');
ylabel('概率');
title('概率直方图');
```
6. **直方图均衡化**:
使用`histeq`函数对图像进行直方图均衡化,这会改变像素值分布以增加对比度:
```matlab
eqImg = histeq(img);
```
7. **显示均衡后的图像**:
最后,再次显示处理后的图像:
```matlab
imshow(eqImg);
```
阅读全文