數字圖像處理--數字圖像的基本操作(MATLAB)

本文作爲本科系統學習數字圖像處理的一個開篇吧,之前間斷的學習了一些FPGA和matlab的相關知識,正逢校內開設這個課程,近期就更新下關於數字圖像的知識吧,由於博主今年要準備考研,所以花在博客上的時間會比較少。

數字圖像的操作

1.灰度或者二值轉換爲索引圖像

gray2ind

將灰度或二進制圖像轉換爲索引圖像
[X,cmap] = gray2ind(I,c)
[X,cmap] = gray2ind(BW,c)
解釋:
I— 灰度圖像—數字數組
BW— 二進制圖像—數字數組
c— 顏色圖顏色的數量—正整數

下面把圖像轉換爲128,64,16灰度級的索引圖片

clc;
clear all;close all;
img=imread('../img1.jpg');
img=rgb2gray(img);
figure;
imshow(img);
title('original');
[x,map]=gray2ind(img,128);
figure;
imshow(x,map);
title('gray_128');
%%%%%%%%%%%重複操作%%%%%%%%%%%%%%
[x1,map1]=gray2ind(img,64);
figure;
imshow(x1,map1);
title('gray_64');
[x2,map2]=gray2ind(img,16);
figure;
imshow(x2,map2);
title('gray_16');

效果

在灰度級不斷減小時,圖片逐漸有失真的趨勢
在這裏插入圖片描述

2.索引圖像轉換爲灰度圖像

ind2gray

I = ind2gray(X,cmap)
I = ind2gray(X,cmap) 將X帶有顏色圖 的索引圖像轉換cmap爲灰度圖像I。該 ind2gray功能在保持亮度的同時從輸入圖像中刪除色相和飽和度信息。
X— 索引圖像----數字數組
cmap— 顏色圖----c-by-3數字數組

clc;
clear all;close all;
load trees
img = ind2gray(X,map);
figure,imshow(X,map);
title('orginal');
figure,imshow(img);
title('gray_image');

效果

在這裏插入圖片描述

3.RGB圖像轉換爲灰度圖像

rgb2gray

將 RGB 圖像或顏色圖轉換爲灰度圖
語法:
I = rgb2gray(RGB)
newmap = rgb2gray(map)

clc;
clear all;close all;
img=imread('../img1.jpg');
gray=rgb2gray(img);
subplot(1,2,1);imshow(img);title('original');
subplot(1,2,2);imshow(gray);title('gray');

效果

在這裏插入圖片描述

4.RGB圖像轉換爲索引圖像

rgb2ind

rgb2ind函數對於減少RGB圖像的顏色數是非常有用的。
將真彩色圖像轉換爲索引圖像。在matlab命令窗口中鍵入doc rgb2ind或help rgb2ind可以獲得更多關於該函數的幫助信息。
該函數將真彩色圖像轉換爲索引圖像, 由於RGB圖像一個像素佔用三個字節, 分別存儲R、G、B分量的值,而索引圖像一個像素佔用一個字節。在將灰度圖像轉換爲索引圖像時, 是從3個字節映射到一個字節的關係。 通常有以下三種算法:
gray = (R + G + B) / 3,即求得R、G、B三個分量平均值作爲索引圖像中對應像素點的像素值。
gray = min(R, G, B),即以R、G、B三個中最小分量作爲索引圖像對應像素點的像素值。
gray = 0.3 * R + 0.59 * G + 0.11 * B(或者表示爲:gray = ((77 * R + 151 * G + 28 * B) >> 8))
調用格式:
[X,map] = rgb2ind(RGB, n)
使用第二種算法把真彩色圖像轉換爲索引圖像,其中n指定map中顏色項數, n最大不能超過65536。
返回值中map即索引圖像的調色板。
X = rgb2ind(RGB, map)
使用調色板map將真彩色圖像轉換爲索引圖像,即在調色板中找到與真彩色圖像顏色值最接近的顏色作爲轉換後的索引圖像的像素值。map中顏色項數(即size(map, 1))不能超過65536。
[X,map] = rgb2ind(RGB, tol)
利用第一種算法把真彩色圖像轉換爲索引圖像, map中最多包含(floor(1/tol)+1)^3種顏色, tol必須是介於0.0和1.0之間的數。
[…] = rgb2ind(…, dither_option)

clc;
clear all;close all;
img=imread('../lena.jpg');
subplot(2,2,1);imshow(img);title('original');
[x,map]=rgb2ind(img,16);
subplot(2,2,2);imshow(x,map);title('最小方差量化抖動');
[x1,map1]=rgb2ind(img,0.5);
subplot(2,2,3);imshow(x,map);title('均值化抖動處理');
[x2,map2]=rgb2ind(img,16,'nodither');
subplot(2,2,4);imshow(x,map);title('不抖動');

效果

在這裏插入圖片描述

5.索引圖像轉換爲RGB圖像

ind2rgb

和ind2gray類似

clc;
clear all;close all;
load trees
img = ind2rgb(X,map);
figure,imshow(X,map);
title('orginal');
figure,imshow(img);
title('rgb_image');

在這裏插入圖片描述

6.通過閾值轉換爲二值圖像

im2bw

im2bw使用閾值(threshold)變換法把灰度圖像(grayscale image)轉換成二值圖像。所謂二值圖像, 一般意義上是指只有純黑(0)、純白(255)兩種顏色的圖像。 當然, 也可以是其他任意兩種顏色的組合。
語法
BW = im2bw(I, level)
BW = im2bw(X, map, level)
BW = im2bw(RGB, level)
其中level就是設置閾值的。level取值範圍[0, 1]

clc;
clear all;close all;
load trees
img = im2bw(X,map,0.3);
subplot(2,2,1);imshow(X,map);title('orginal');
subplot(2,2,2);imshow(img);title('bw_ind');
rgb=imread('../img1.jpg');
rgb_bw = im2bw(rgb,0.3);
subplot(2,2,3);imshow(rgb);title('orginal');
subplot(2,2,4);imshow(rgb_bw);title('bw_rgb');

效果

在這裏插入圖片描述

7.多級閾值化方法將灰度圖像轉換爲索引圖像

grayslice

語法:
X= grayslice(I,n);-----將亮度量化爲n個等級,默認爲64
X= grayslice(I,v);-----按閾值向量v對圖像的亮度進行劃分

clc;
clear all;close all;
img=imread('../img2.jpg');
subplot(2,2,1);imshow(img);title('original');
img1 = grayslice(img,64);
subplot(2,2,2);imshow(img1,jet(16));title('slices-64');
img2 = grayslice(img,128);
subplot(2,2,3);imshow(img,jet(128));title('slices-128');

效果

在這裏插入圖片描述

錯誤總結:
用matlab處理音頻文件時候在命令行彈出提示,嘗試將 SCRIPT script 作爲函數執行

是因爲編寫的文件名和執行函數重名了。

例如我這裏的sound.m和函數sound(y,fs)重名了,所以出錯失敗了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章