1. 數字圖像處理及算術編碼(或DCT壓縮編碼)模擬實現
這些都是很簡單的功能,為什麼不自己編程試試呢?
風之風信子會幫你解決這一次的問題,誰幫你引導以後的路呢?
%Date: 2011年9月26日20:25:53
%Function: 3*3均值濾波平滑
%Written by 風之風信子
clc;
clear;
clear all;
I=imread('peppers.png');
%這里改成你的路徑,
%切記圖像不能放在漢字文件夾。
%路徑例子:d:\matlab\moon_light_shadow.jpg
J=rgb2gray(I);
%彩色變黑白
imshow(J);
h=(1/9)*[1 1 1;1 1 1;1 1 1];
I2=imfilter(J,h);
%濾波(就是求平均的過程)
figure,imshow(I2);
%%%%直方圖均衡化 matlab實現:
clc;
clear all;
I = imread('d:\Image\hill_histogram.jpg');
I=rgb2gray(I);
J = histeq(I);
subplot(221);imshow(I);
subplot(222); imshow(J);
subplot(223); imhist(I,64)
subplot(224); imhist(J,64)
%%%%DCT編碼 matlab實現:
R=imread('d:\Image\car.jpg'); %裝入原始圖像
I=rgb2gray(R); %轉換成灰度圖像
J=dct2(I); %
colormap(jet(256));
J(abs(J)<100)=0; %將DCT變換值小於10的元素設為0
K=idct2(J);
figure; subplot(121);imshow(I,[0,255]);
title(' original'); %顯示原圖像
subplot(122);imshow(K,[0,255]);
title('IDCT ');%顯示反變
2. MATLAB--數字圖像處理 Otsu演算法(雙閾值)
在數字圖像處理中,Otsu演算法是一種著名的雙閾值分割技術。它的核心思想是通過優化灰度級像素的統計特性來找到最佳的兩個閾值,從而實現圖像的二值化。具體步驟如下:
首先,演算法通過計算每個像素灰度值與其均值u的方差,構建一個關於灰度級的累計分布函數(CDF),並定義一個函數g,其中w0、w1和w2分別對應不同灰度級的概率權重,(u0-u)^2、(u1-u)^2和(w2-u)^2分別代表每個灰度級與均值的方差。目標是找到兩個閾值u0和u1,使得g的值最大,這樣可以確保分割後的圖像具有最佳的類間方差和類內方差。
接著,通過求導並令其等於零,可以找到兩個局部最優的閾值。這些閾值將圖像像素劃分為兩個類別,通常一個類別代表前景,另一個代表背景。
一旦閾值確定,就可以使用它們將圖像分割成兩個部分。這個過程通常在主函數中調用,調用時傳入計算出的閾值,圖像數據和可能的額外參數。
總的來說,Otsu演算法是一種簡單而有效的圖像二值化方法,它在不需要預先設定閾值的情況下,自動找到最佳的分割點,從而提高圖像處理的精度。