数字图像处理Malab/C++(一)灰度图像反色、缩放空间分辨率、降低灰度分辨率

一、Matlab

读入任意一副灰度图片,请用Matlab程序实现以下功能:

1. 读取图片,图片反色(即255 - 像素灰度值),存储为jpg图片;

exp1_ex1.m

I = imread('../std_imgs/lena_gray_256.tif'); %读取灰度图片

I_invese = 255 - I; %反色

figure; %创建一个新的窗口
subplot(1,2,1);imshow(I) %显示原图像
subplot(1,2,2);imshow(I_invese,[]) %显示反色图像

imwrite(I_invese, 'lena_gray_256_invese.jpg'); %存储为jpg图片

2. 对该图片进行1/2,1/4,1/8,1/16,1/32缩放的图像空间分辨率显示,并存储为jpg图片;

exp1_ex2.m

I = imread('../std_imgs/lena_gray_256.tif'); %读取灰度图片

I_2 = imresize(imresize(I, 1/2), 2); %空间分辨率1/2缩放
I_4 = imresize(imresize(I, 1/4), 4); %1/4缩放
I_8 = imresize(imresize(I, 1/8), 8); %1/8缩放
I_16 = imresize(imresize(I, 1/16), 16); %1/16缩放
I_32 = imresize(imresize(I, 1/32), 32); %1/32缩放
figure; 
subplot(2,3,1);imshow(I) %显示
subplot(2,3,2);imshow(I_2)
subplot(2,3,3);imshow(I_4)
subplot(2,3,4);imshow(I_8)
subplot(2,3,5);imshow(I_16)
subplot(2,3,6);imshow(I_32)

imwrite(I_2,'lena_gray_d2.jpg'); %存储为jpg图片
imwrite(I_4,'lena_gray_d4.jpg'); 
imwrite(I_8,'lena_gray_d8.jpg'); 
imwrite(I_16,'lena_gray_d16.jpg');
imwrite(I_32,'lena_gray_d32.jpg');

3. 实现图像的灰度分辨率图(1-8 bits),并存储为jpg图片;

 imratio.m(转换灰度分辨率函数)

function R = imratio(I,ratio)
%IMRATIO 输出图像块的灰度分辨率图(1-8 bits)
% 将输入灰度图像的默认灰度级[0:255]整除(向下取整)到分辨率对应的灰度级
% I 输入灰度图像
% ratio 分辨率值
% R 输出相应的分辨率图

graylevel = fix(double(I)/(256/2^ratio)); % 按分辨率减少灰度级

R = uint8(graylevel*255/(2^ratio-1)); % 恢复默认灰度级[0:255]输出

end

exp1_ex3.m

I = imread('../std_imgs/lena_gray_256.tif'); %读取灰度图片
I_8bit = imratio(I,8); %8bits灰度分辨率图(=原图)
I_7bit = imratio(I,7); %7bits
I_6bit = imratio(I,6); %6bits
I_5bit = imratio(I,5); %5bits
I_4bit = imratio(I,4); %4bits
I_3bit = imratio(I,3); %3bits
I_2bit = imratio(I,2); %2bits
I_1bit = imratio(I,1); %1bit
figure;
subplot(4,2,1);imshow(I_8bit) %显示
subplot(4,2,2);imshow(I_7bit)
subplot(4,2,3);imshow(I_6bit)
subplot(4,2,4);imshow(I_5bit)
subplot(4,2,5);imshow(I_4bit)
subplot(4,2,6);imshow(I_3bit)
subplot(4,2,7);imshow(I_2bit)
subplot(4,2,8);imshow(I_1bit)
imwrite(I_8bit,'lena_gray_8bit.jpg'); %存储为jpg图片
imwrite(I_7bit,'lena_gray_7bit.jpg');
imwrite(I_6bit,'lena_gray_6bit.jpg');
imwrite(I_5bit,'lena_gray_5bit.jpg');
imwrite(I_4bit,'lena_gray_4bit.jpg');
imwrite(I_3bit,'lena_gray_3bit.jpg');
imwrite(I_2bit,'lena_gray_2bit.jpg');
imwrite(I_1bit,'lena_gray_1bit.jpg');

 二、C++

//读入任意一副灰度图片(见附件 Std_imgs.zip),请用C++程序实现以下功能:
//
//1. 读取图片,图片反色(即用: 255 - 像素灰度值),存储为 jpg 图片;
//
//2. 对该图片截取为 256x256 的图像块,进行1 / 2, 1 / 4, 1 / 8, 1 / 16, 1 / 32 缩放的图像空间分辨率 显示(如图所示), 并存储为 jpg 图片;
//
//3. 实现 该 256x256 的图像 块的灰度分辨率图(1 - 8 bits) ,并 存储为 jpg 图片;

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat ori_gray_image, out_gray_image1, out_gray_image2, out_gray_image3;
	
	ori_gray_image = imread("..\\..\\std_imgs\\lena_gray_256.tif", IMREAD_GRAYSCALE);  //读取文件夹中的灰度图像

	//检测图像是否加载成功
	if (ori_gray_image.empty())  //检测image有无数据,无数据 image.empty()返回 真
	{
		cout << "Could not open or find the image" << endl;
		return -1;
	}

	//显示原图像
	imshow("ori_gray_image", ori_gray_image);  //在窗口显示图像

	//反色
	out_gray_image1 = ori_gray_image.clone();
	for (int i = 0; i < ori_gray_image.rows; i++)
	{
		for (int j = 0; j < ori_gray_image.cols; j++)
		{
			out_gray_image1.at<uchar>(i, j) = 255 - ori_gray_image.at<uchar>(i, j);
		}
	}
	//显示和存储反色图像
	imshow("out_gray_image1", out_gray_image1);
	imwrite("out_gray_image1.jpg", out_gray_image1);

	//缩放
	resize(ori_gray_image, out_gray_image2, Size(), 0.5, 0.5);
	resize(out_gray_image2, out_gray_image2, Size(), 2, 2);
	imshow("out_gray_image2", out_gray_image2);

	//降低灰度分辨率
	out_gray_image3 = ori_gray_image.clone();
	int ratio = 1;
	for (int i = 0; i < ori_gray_image.rows; i++)
	{
		for (int j = 0; j < ori_gray_image.cols; j++)
		{
			out_gray_image3.at<uchar>(i, j) = ori_gray_image.at<uchar>(i, j) / (256 / (int)pow(2, ratio)) * (255 / ((int)pow(2, ratio)-1));
		}
	}
	imshow("out_gray_image3", out_gray_image3);

	waitKey(0);  //暂停,保持图像显示,等待按键结束

	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值