Unverified Commit 183952ef authored by Kiryuu Sakuya's avatar Kiryuu Sakuya 🎵
Browse files

Upload 01

parent 8b473b19
test.m
\ No newline at end of file
# 数字图像处理基础
https://www.educoder.net/shixuns/f7rwmqbo/challenges
## 01. 实践题 - 数字图像读取及显示
### 任务描述
本关任务:在 Matlab 环境下实现数字图像的读取及显示操作。
### 相关知识
为了完成本关任务,你需要掌握:
1. 数字图像读取函数
2. 彩色转灰度的实现
3. 数字图像显示
#### 数字图像读取
Matlab 图像读取函数:`imread(filename)`,可将 filename 指定的数字图像读取到 Matlab 的 Mat 结构中。
```matlab
I=imread('lena.jpg'); %读取名字为lena的JPG格式图片到I中
```
#### 彩色转灰度
通俗的理解,遍历数组就是:如果 I 中存储的图像是彩色图像,则 Matlab 将图像的 r、g、b 三个分量组织为 I 中的三个通道数据。
示例如下:
```matlab
Igray=rgb2gray(I);
```
输出:Igray 为 I 的灰度图像
#### 图像显示
图像显示函数名为 `imshow(I,[])`
```matlab
figure,imshow(I)
```
#### 图像基础操作
Matlab环境下实践完成:
1. 将 lena.jpg 读入 Matrix I 中;
2. 调用 imshow 命令将 lena 显示在对话框里。
### 编程要求
根据提示,在右侧编辑器补充代码,完成上述两项操作。
### 测试说明
平台会对你编写的代码进行测试:
测试输入:
预期输出:
![lena.jpg](img/lena.jpg)
提示:
----
开始你的任务吧,祝你成功!
### 答案
## 02. 实践题 - 图像取样与量化实践
### 任务描述
本关任务:编写Matlab代码实现:
1. 将指定灰度图像按 256x256、64x64、32x32、4x4 的取样频率取样,并显示取样后的图像。
2. 将灰度图像的灰度量化为 64、16、4、2 级灰度图像,并列表显示量化后各图像。
```
任务所需的图像资源名为:rose_512.jpg
资源的存储位置为:./img/
```
### 相关知识
为了完成本关任务,你需要掌握:
1. 图像彩色转灰度 `rgb2gray(I)`
2. 空间取样函数 `imresize(A,[mrows ncols],method)`
3. 灰度量化函数 `grayslice(I,m)`
#### 彩色转灰度
```matlab
I=imread('./img/lena.jpg');
Igray=rgb2gray(I);
```
#### 空间取样
通俗的理解,离散后的图像空间上取样就是对图像进行缩放:**图像的宽高按指定的参数进行图像取样插值处理。**
示例如下:
```matlab
Igray=rgb2gray(imread('./img/rose_512.jpg'));
Is1=imresize(Igray,[128,128],'bicubic');
figure(1);
imshow(Is1,[]);
```
输出:
![task2-example-output.png](task2-example-output.png)
#### 灰度量化
通俗的理解,在保持图像空间不变的基础上对每个像素的灰度进行取样,就是对图像的灰度进行缩放。
示例如下:
```matlab
Igray=rgb2gray(imread('./img/rose_512.jpg'));
Is1=grayslice(Igray,4); %将Igray图像的灰度量化为4级
figure(1);
imshow(Is1,[]);
```
输出:
![task2-example-output-2.png](task2-example-output-2.png)
#### 色彩量化
通俗的理解,在保持彩色图像空间不变的基础上对每个像素的将彩色进行取样。
示例如下:
```matlab
I=imread('./img/lena.jpg');
[I,C]=rgb2ind(I,4); %将I图像的颜色量化为4种颜色的索引图像
figure(1);
imshow(I,C);
```
输出:
![task2-example-output-3.png](task2-example-output-3.png)
### 编程要求
根据提示,在右侧编辑器补充代码,完成任务描述中的 2 项任务,并建立一个 2 行 5 列的 figure,每行第一列显示原图,其它分别显示上述任务每个要求的处理结果。
将上述 2 个任务的输出显示出来。
----
开始你的任务吧,祝你成功!
### 答案
%%%%%%%%%%%%%%%
%%请不要改动
warning('off','all');
graphics_toolkit('gnuplot')
%%%%%%%%%%%%%%%%%%
figure(1)
%%%%%%%%% Begin %%%%%%%%%
%%%%%%%%% Begin %%%%%%%%%
sa=pwd;
print(1,'-djpeg','./pictures/step1/picture1.jpg');
run('./task1/test1.m');
system('python3 ./task1/test1py.py');
\ No newline at end of file
cd(sa);
F=imread('./img/lena.jpg');
figure(2)
imshow(F,[]);
%sa=pwd;
print(2,'-djpeg','./pictureans/step1/picture1ans.jpg');
\ No newline at end of file
#!/usr/bin/python3
from PIL import Image
from PIL import ImageChops
def compare_images(path_one, path_two):
image_one = Image.open(path_one)
image_two = Image.open(path_two)
diff = ImageChops.difference(image_one, image_two)
if diff.getbbox() is None:
print("The picture you output is exactly the same as the standard picture")
return
else:
print("The picture you output is different from the standard picture")
if __name__ == '__main__':
compare_images('./pictureans/step1/picture1ans.jpg', './picture/step1/picture1.jpg')
%%%%%%%%%%%%%%%
%%请不要改动
warning('off','all');
graphics_toolkit('gnuplot')
pkg load image
%%%%%%%%%%%%%%%%%%
figure(1);
%%%%%%%%% Begin %%%%%%%%%
subplot(3,5,1);
%%%%%%%%% End %%%%%%%%%
%结果对比代码,请不要改动
sa=pwd;
print(1,'-djpeg','./pictures/step2/picture2.jpg');
run('./task2/test2.m');
system('python3 ./task2/test2py.py');
\ No newline at end of file
cd(sa);
I=imread('./img/rose_512.jpg');
figure(2);
subplot(2,5,1);
imshow(I,[]);
subplot(2,5,2);
I256=imresize(I,[256,256],'bicubic');
imshow(I256,[]);
subplot(2,5,3);
I128=imresize(I,[64,64],'bicubic');
imshow(I128,[]);
subplot(2,5,4);
I64=imresize(I,[32,32],'bicubic');
imshow(I64,[]);
subplot(2,5,5);
I32=imresize(I,[4,4],'bicubic');
imshow(I32,[]);
subplot(2,5,6);
imshow(I,[]);
subplot(2,5,7);
I256=grayslice(I,64);
imshow(I256,[])
subplot(2,5,8);
I64=grayslice(I,16);
imshow(I64,[])
subplot(2,5,9);
I16=grayslice(I,4);
imshow(I16,[])
subplot(2,5,10);
I4=grayslice(I,2);
imshow(I4,[])
%sa=pwd;
print(2,'-djpeg','./pictureans/step2/picture2ans.jpg');
#!/usr/bin/python3
from PIL import Image
from PIL import ImageChops
def compare_images(path_one, path_two):
image_one = Image.open(path_one)
image_two = Image.open(path_two)
diff = ImageChops.difference(image_one, image_two)
if diff.getbbox() is None:
print("The picture you output is exactly the same as the standard picture")
return
else:
print("The picture you output is different from the standard picture")
if __name__ == '__main__':
compare_images('./pictureans/step2/picture2ans.jpg', './picture/step2/picture2.jpg')
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment