(1)读取matlab自带图像‘pout.tif’。将图像矩阵存储为一个列向量。如原图像矩阵维度为291
240,将其转变为69840
1的列向量;要求该代码也可实现对其他灰度图像进行转换。
%% 2
clc;clear;close all;
I = imread('pout.tif');
imshow(I)
[img_high,img_wide] = size(I);
new_form = zeros(img_high*img_wide,1);
for i = 1:img_wide
for j = 1:img_high
new_form(j+(i-1)*img_high) = I(j,i);
end
end
(2)读入彩色图像,0.bmp,90.bmp,180.bmp,270.bmp,这四副图像为固定视角,变换光照下拍摄,也就是说目标物体在所有图像的位置固定。但由于图像太大,需要将目标物体截取出来,如下图所示。
clc;clear;close all;
inputfile = './';
outputfile = './cut_img/';
Files_in = dir([inputfile '*.bmp']);
% Files_out = dir([outputfile '*.bmp']);
number = length(Files_in);
for i=1:number
I = imread([inputfile Files_in(i).name]);
subplot(2,number,i);imshow(I);title(num2str(Files_in(i).name));
img_out = I(609:1290,997:1870,:);
imwrite(img_out,[outputfile Files_in(i).name(1:end-4) '_cut.bmp']);
subplot(2,number,i+4);imshow(img_out);
title(strcat(num2str(Files_in(i).name(1:end-4)),'cut.bmp'));
end
(3)读入提供的彩色图像‘lena.jpg’(可从网上自己搜索lena图),并对图像加入不同种类的噪声(高斯噪声,可选系数不同,至少两种。统计在加入不同噪声后的信噪比。采用大家熟悉的均值和中值滤波对加噪图像滤波后再统计信噪比。信噪比包括4个(加入第一种噪声的信噪比,加入第二种噪声的信噪比,均值滤波后的信噪比,中值滤波后的信噪比)
%% 4
clc;clear;close all;
I = imread('./lena.jpg');
gauss1_I = imnoise(I,'gaussian',0,0.01);%均值0,方差0.01
gauss2_I = imnoise(I,'gaussian',0,0.1);
%中值滤波(3D)
N = 3;
median_F1 = medfilt3(gauss1_I,[N,N,N]);
median_F2 = medfilt3(gauss2_I,[N,N,N]);
%均值滤波
aver_F1 = imfilter(gauss1_I,fspecial('average',N));
aver_F2 = imfilter(gauss2_I,fspecial('average',N));
%均方差
MSE_N1 = sum( sum( (double(I)-double(gauss1_I)).^2) / (size(I,1)*size(I,2)) ); %0.01高斯噪声 均方差
MSE_N2 = sum( sum( (double(I)-double(gauss2_I)).^2) / (size(I,1)*size(I,2)) ); %0.1高斯噪声 均方差
MSE_N1_medi = sum( sum( (double(I)-double(median_F1)).^2) / (size(I,1)*size(I,2)) ); %0.01噪声中值滤波后 均方差
MSE_N2_medi = sum( sum( (double(I)-double(median_F2)).^2) / (size(I,1)*size(I,2)) ); %0.1噪声中值滤波后 均方差
MSE_N1_aver = sum( sum( (double(I)-double(aver_F1)).^2) / (size(I,1)*size(I,2)) ); %0.01噪声均值滤波后 均方差
MSE_N2_aver = sum( sum( (double(I)-double(aver_F2)).^2) / (size(I,1)*size(I,2)) ); %0.1噪声均值滤波后 均方差
%峰值信噪比(数值越大表示失真越小)
PSNR_N1 = 20*log10( double(max(max(I))) ./ sqrt(MSE_N1) );
PSNR_N2 = 20*log10( double(max(max(I))) ./ sqrt(MSE_N2) );
PSNR_N1_medi = 20*log10( double(max(max(I))) ./ sqrt(MSE_N1_medi) );
PSNR_N2_medi = 20*log10( double(max(max(I))) ./ sqrt(MSE_N2_medi) );
PSNR_N1_aver = 20*log10( double(max(max(I))) ./ sqrt(MSE_N1_aver) );
PSNR_N2_aver = 20*log10( double(max(max(I))) ./ sqrt(MSE_N2_aver) );
%显示
subplot(231);imshow(gauss1_I); title({'μ=0,σ=0.01高斯噪声' ; ['PSNR=' num2str(PSNR_N1)]});
subplot(234);imshow(gauss2_I); title({'μ=0,σ= 0.1高斯噪声' ; ['PSNR=' num2str(PSNR_N2)]});
subplot(232);imshow(median_F1);title({'μ=0,σ=0.01高斯噪声+中值滤波'; ['PSNR=' num2str(PSNR_N1_medi)]});
subplot(235);imshow(median_F2);title({'μ=0,σ= 0.1高斯噪声+中值滤波'; ['PSNR=' num2str(PSNR_N2_medi)]});
subplot(233);imshow(aver_F1); title({'μ=0,σ=0.01高斯噪声+均值滤波'; ['PSNR=' num2str(PSNR_N1_aver)]});
subplot(236);imshow(aver_F2); title({'μ=0,σ= 0.1高斯噪声+均值滤波'; ['PSNR=' num2str(PSNR_N2_aver)]});
(4)利用rand函数产生10个0~100以内的随机数,对这些随机数进行冒泡排序,并分别用plot,stem,bar等绘图函数分别绘制排序前和排序后图形。
%% 5
clc;clear;close all;
number = 100 * rand(1,10);
pri_number = number;
for i = 1:size(number,2)-1
for j = 1:size(number,2)-i
if number(j) > number(j+1)
t = number(j);
number(j) = number(j+1);
number(j+1) = t;
end
end
end
sort_number = number;
figure,
subplot(211);plot(pri_number);title('未排序数字');grid
subplot(212);plot(sort_number);title('排序数字');grid
figure,
subplot(211);stem(pri_number);title('未排序数字');grid
subplot(212);stem(sort_number);title('排序数字');grid
figure,
subplot(211);bar(pri_number);title('未排序数字');grid
subplot(212);bar(sort_number);title('排序数字');grid
(5)素材中三幅鸡蛋破损图像进行破损位置手动标注,标注完成后处理为标准标注模板,标注模板要求为黑白二值图像。如下图所示:
%% 6
clc;clear;close all;
I1 = imread('./raw_egg1.png');
I2 = imread('./raw_egg2.png');
I3 = imread('./raw_egg3.png');
Sign_I1 = imread('./sign_raw_egg1.png');
Sign_I2 = imread('./sign_raw_egg2.png');
Sign_I3 = imread('./sign_raw_egg3.png');
Sign_model_I1 = imbinarize(rgb2gray(Sign_I1),0.8);
Sign_model_I2 = imbinarize(rgb2gray(Sign_I2),0.8);
Sign_model_I3 = imbinarize(rgb2gray(Sign_I3),0.8);
subplot(331);imshow(I1);title('raw egg1');
subplot(332);imshow(Sign_I1);title('手动标注raw egg1');
subplot(333);imshow(Sign_model_I1);title('标注模板raw egg1');
subplot(334);imshow(I2);title('raw egg2');
subplot(335);imshow(Sign_I2);title('手动标注raw egg2');
subplot(336);imshow(Sign_model_I2);title('标注模板raw egg2');
subplot(337);imshow(I3);title('raw egg3');
subplot(338);imshow(Sign_I3);title('手动标注raw egg3');
subplot(339);imshow(Sign_model_I3);title('标注模板raw egg3');
版权声明:本文为qq_45004982原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。