1. 程式人生 > >影象處理 灰度的線性變換

影象處理 灰度的線性變換

灰度的線性變換

Db = f(Da) = k*Da +b   k為斜率,b為y軸交點截距,Da為輸入影象的灰度,Db為輸出影象的灰度

三個有趣的結論,相信會對灰度變換的理解更加深刻:

1,k> 1增加對比度,k<1減小對比度

2,k=1改變亮度

3,k=1,b=0保持原來影象,k=-1,b=255,原影象反轉

以下講述線性變換的程式碼的步驟:

1,判斷引數是否是8點陣圖像

2,對畫素的所有點執行線性變換

3,對執行完畫素變換的灰度值進行合法性分析,對不合法的資料強制合法

4,對圖片的原來座標的所有點設定新的灰度值。

以下程式碼轉載自數字影象與機器視覺一書:

所有的程式碼我都親自測試了,感覺不是很難,後面的可能會越來越難,先一點點啃吧。

BOOL CImgProcess::LinTranLP(CImgProcess* pTo, double dFa, double dFb)
{
if(m_pBMIH->biBitCount != 8) return false;


BYTE bGray,target;
for(int i = 0; i < m_pBMIH->biHeight; ++i)
{
for(int j = 0; j < m_pBMIH->biWidth; ++j)
{
bGray = GetGray(j,i);
target = dFa * bGray + dFb;
if(target < 0)
target = 0;
if(target > 255)
target = 255;
pTo->SetPixel(j, i, target);
}
}
return TRUE;
}

下面是採用的matlab的程式碼:

I = imread('coins.png');% 讀入原影象


I = im2double(I);% 轉換資料型別為double
[M,N] = size(I);% 計算影象面積


figure(1);% 開啟新視窗
imshow(I);% 顯示原影象
title('原影象');


figure(2);% 開啟新視窗
[H,x] = imhist(I, 64);% 計算64個小區間的灰度直方圖
stem(x, (H/M/N), '.');% 顯示原影象的直方圖
title('原影象');


% 增加對比度
Fa = 2; Fb = -55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,1);
imshow(O);
title('Fa = 2 Fb = -55 增加對比度');


figure(4);
subplot(2,2,1);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 2 Fb = -55 增加對比度');


% 減小對比度
Fa = 0.5; Fb = -55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,2);
imshow(O);
title('Fa = 0.5 Fb = -55 減小對比度');


figure(4);
subplot(2,2,2);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 0.5 Fb = -55 減小對比度');


% 線性增加亮度
Fa = 1; Fb = 55;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,3);
imshow(O);
title('Fa = 1 Fb = 55 線性平移增加亮度');


figure(4);
subplot(2,2,3);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 1 Fb = 55 線性平移增加亮度');


% 反相顯示
Fa = -1; Fb = 255;
O = Fa * I + Fb/255;


figure(3);
subplot(2,2,4);
imshow(O);
title('Fa = -1 Fb = 255 反相顯示');


figure(4);
subplot(2,2,4);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = -1 Fb = 255 反相顯示');

相關推薦

影象處理 線性變換

灰度的線性變換 Db = f(Da) = k*Da +b   k為斜率,b為y軸交點截距,Da為輸入影象的灰度,Db為輸出影象的灰度 三個有趣的結論,相信會對灰度變換的理解更加深刻: 1,k> 1增加對比度,k<1減小對比度 2,k=1改變亮度 3,k=1,b=

MATLAB的影象線性變換

下面重點介紹一下如何用MATLAB對影象進行灰度線性變換,具體如下: 1、開啟MATLAB主介面,在其中的編輯器中寫入下列程式碼,其中I=imread('G:\MATLAB練習\bm.bmp');此程式碼是讀入圖片的語句,也就是我們想要處理的圖片,這裡我是存放在G盤的MATLAB練習資料夾中,名

影象處理-變換函式imadjust和stretchlim

imadjust 在matlab中imadjust原型如下: g = imadjust(f,[low_in high_in], [low_out high_out], gamma) 1 f表示一張灰度圖片,此函式將f的灰度值映象到g中的新值,也就是將low_in與high_in之間的值對映到lo

python全域性線性變換——自由設定影象範圍

全域性線性變換的公式是s = (r-a)*(d-c)/(b-a)+c,其中a、b是原圖片的灰度最小值和最大值,c、d是變換後的灰度值的最小值和最大值。r是當前畫素點的灰度值,s是當前畫素點變換後的灰度值

[數字影象處理]變換——反轉,對數變換,伽馬變換拉伸,切割,點陣圖切割

[plain] view plaincopyprint? close all;  clear all;  %% -------------Contrast Stretching-----------------  f = imread('washed_out_pollen_image.tif');  

Matlab數字影象處理——變換

clear; close all; %讀取灰度影象 img = imread('E:\DIP\image_gray.jpg'); img_0 = im2double(img); subplot(2,4,1); imshow(img_0); title('原圖'); a = s

opencv學習筆記六:影象線性變換

通過影象灰度線性變換提高影象對比度和亮度,原影象為src,目標影象為dst,則dst(x,y) = * src(x,y) + 。 不僅對單通道影象可以做灰度線性變換,對三通道影象同樣可以。 #include<opencv2/opencv.hpp>; #incl

OpenCV計算機視覺學習(3)——影象線性變換與非線性變換(對數變換,伽馬變換

如果需要處理的原圖及程式碼,請移步小編的GitHub地址   傳送門:請點選我   如果點選有誤:https://github.com/LeBron-Jian/ComputerVisionPractice   下面主要學習影象灰度化的知識,結合OpenCV呼叫 cv2.cvtColor()函式實現影象灰度化,

html 影象處理 圖和浮雕圖類PS

    html5 的canvas還有一些很酷炫的效果,接下來講的是canvas對畫素的處理,雖然略有些複雜,但實現出的效果,還是很讚的~~。    為了不讓大家失望,先強調一句:下列效果需呼叫getImageData(),而這個方法會被某些瀏覽器阻止,如

Matlab影象處理系列1———線性變換和直方圖均衡

注:本系列來自於影象處理課程實驗,用Matlab實現最基本的影象處理演算法 影象點處理是影象處理系列的基礎,主要用於讓我們熟悉Matlab影象處理的程式設計環境。灰度線性變換和灰度拉伸是對畫素灰度值的變換操作,直方圖是對畫素灰度值的統計,直方圖均衡是對灰度值分

[matlab影象處理] 化 (自己計算化)

close all;%關閉所有視窗 clear;%清除變數的狀態資料 clc;%清除命令列 wangpic=imread('lenargb.bmp'); figure;%開啟一個新視窗 imshow(wangpic); title('1 lena的原圖'); wangpic

java影象處理---化(二值化)處理

java實現圖片灰度化(二值化) 此函式功能: 1. 讀圖 2. 建立緩衝區 3. 將圖片畫素複製到緩衝區的相應位置 4. 輸出比較 輸入: RGB

基於c++的線性變換

灰度的線性變換:正比+反比                               DB=f(DA)=k*DA+b            DA:輸入影象的灰度               DB:輸出影象的灰度               k:線性函式的斜率      

影象處理基礎(7):影象變換(續篇)

            灰度變換,屬於一個非常重要的概念。這裡主要參考《Digital Image Processing》 Rafael C. Gonzalez / Richard E. Woods 的第三章。書中

影象處理基礎(7):影象變換

前面幾篇文章介紹的是影象的空間域濾波,其對畫素的處理都是基於畫素的某一鄰域進行的。本文介紹的影象的灰度變換則不同,其對畫素的計算僅僅依賴於當前畫素和灰度變換函式。 灰度變換也被稱為影象的點運算(只針對影象的某一畫素點)是所有影象處理技術中最簡單的技術,其變換形式如下:

《數字影象處理》第三講——圖象基本運算與對映變換

雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正! 目錄 3.1影象的運算 3.2基於灰度變換的影象增強 3.3直方圖處理

影象變換——影象旋轉 影象的反色處理 對比度拉伸

                這次我們要處理的是對影象進行旋轉操作,具體要求,如下:       自定義一個影象的仿射變換函式,用於旋轉給定的輸入影象,該函式的輸入引數包括處理前的影象和旋轉角度。輸入的角度為正數,表明處理結果為順時針旋轉,負數則為逆時針旋轉,輸出引數為處理後的影象。       曾參考《數

Matlab影象處理-亮度(變換問題

亮度(灰度)變換是一種非常重要的空間域內處理影象的方法,主要介紹幾個亮度變換函式,以及應用。 函式簡介 1.imadjust 該函式用來調整亮度,可以對映加權至更高的或更低輸出值。 imadjust是亮度變換的基本IPT工具,語法為: g

影象變換——影象旋轉、影象的反色處理、對比度拉伸

這次我們要處理的是對影象進行旋轉操作,具體要求,如下:        自定義一個影象的仿射變換函式,用於旋轉給定的輸入影象,該函式的輸入引數包括處理前的影象和旋轉角度。輸入的角度為正數,表明處理結果為

【數字圖像處理】五.MFC圖像點運算之線性變化、非線性變化、閾值化和均衡化處理具體解釋

tput rgb 強制轉換 spa ros 例如 read 算法 nload 本文主要講述基於VC++6.0 MFC圖像處理的應用知識,主要結合自己大三所學課程《數字圖像處理》及課件進行解說。主要通過MFC單文檔視圖實現顯示BMP圖片