伊莉討論區

標題: matlab灰階部分補色問題 [打印本頁]

作者: ivs86    時間: 2013-10-26 04:49 PM     標題: matlab灰階部分補色問題

各位大大,小弟是matlab的初學者
目前在灰階補色上遇到一些問題,想請各位大大指點一下
我如果想在一張灰階圖片上做出部分補色效果
小於128的
y(輸出)=255-x(輸入)
在不用imcomplement指令下
我該如何編寫這段程式

[attach]96098020[/attach]

作者: ivs86    時間: 2013-10-26 11:50 PM

我目前的寫法如下,但show出來的圖全白
不知哪裡錯了,請高手幫忙一下
clear
x=imread('lena.gif');
a=double(x);
if a(1:512,1:512)<128;
b=255-a(1:512,1:512);
else
b=a;
end
imshow(a,[0 255]),figure,imshow(b)
作者: isB9K_s    時間: 2013-10-27 11:05 AM

本帖最後由 isB9K_s 於 2013-10-28 04:57 PM 編輯

程式修改如下:
  1. clear
  2. x=imread('你的圖');
  3. a=rgb2gray(x); %rgb image converts to gray image
  4. b=255-a; %complement
  5. imshow(a),figure,imshow(b)
  6. figure,imshow(imcomplement(a)) (可以把這段刪除,純粹對照)
複製代碼
以下是詳細的解釋:
你要先把rgb的檔案轉到gray level
語法是rgb2gray(image)
這個時候你用imshow(a)看到的就會是灰階的圖片
比方以下面這張水母的原圖是
[attach]96121407[/attach]

我現在使用rgb2gray之後會變成下面這張
[attach]96121429[/attach]

看到這張就表示已經成功轉到gray level,那像素範圍就是在0~255之間
接著我們直接用255-a就可以了,剪完之後的圖如下
[attach]96121556[/attach]

下圖是用本來就內建的imcomplement函式的輸出結果,可知新的程式與此結果穩合
[attach]96121561[/attach]

如果還有問題再提出討論
作者: ivs86    時間: 2013-10-28 12:24 AM

isB9K_s 發表於 2013-10-27 11:05 AM
你要先把rgb的檔案轉到gray level
語法是rgb2gray(image)
這個時候你用imshow(a)看到的就會是灰階的圖片

感謝熱情解答,讓我有更進一部的了解,
但可否再請教一下,
若我此題不始用imcomplement指令的話程式該如何編輯
作者: isB9K_s    時間: 2013-10-28 04:51 PM

本帖最後由 isB9K_s 於 2013-10-28 05:16 PM 編輯
ivs86 發表於 2013-10-28 12:24 AM
感謝熱情解答,讓我有更進一部的了解,
但可否再請教一下,
若我此題不始用imcomplement指令的話程式該如 ...

不太明白你的意思
新的程式碼之imcomplement函式存粹當對照組,證明不用此函式也會有一樣的結果
也許程式碼寫太下方你沒有注意到
我已經在#3中調到最上方
上面的講解主要是說每段程式碼分別做了什麼
figure,imshow(imcomplement(a))是可以刪去的
那只是再開一張圖用imcomplement函式對已經轉換成gray image的圖直接做補色
(你要對灰階圖片做補色,必須把rgb的圖先換成灰階的圖,這步一定要做)
只要用imcomplement函式的結果跟前面程式碼所輸出的結果一樣
表示這個程式碼沒有錯

如果有問題可再請教
作者: ivs86    時間: 2013-10-28 08:59 PM

isB9K_s 發表於 2013-10-28 04:51 PM
不太明白你的意思
新的程式碼之imcomplement函式存粹當對照組,證明不用此函式也會有一樣的結果
也許程式 ...

可能是我說的不清楚〜sorry

我再說一下我的需求
我的圖是灰階圖
我的需求是
(1)該圖灰階值<128的用255減該點的值(y輸出=255-x原灰階值)
             灰階值>=128的輸出值不變(等於原灰階值)
(2)該圖灰階值>128的用255減該點的值(y輸出=255-x原灰階值)
             灰階值<=128的輸出值不變(等於原灰階值)

這會呈獻兩張不同樣式的圖

拜託大大指點
作者: isB9K_s    時間: 2013-10-28 11:21 PM

本帖最後由 isB9K_s 於 2013-10-28 11:27 PM 編輯
ivs86 發表於 2013-10-28 08:59 PM
可能是我說的不清楚〜sorry

我再說一下我的需求

該說抱歉的應該是我,竟然誤以為是直接做補色  

這邊會牽涉到二維陣列的技巧,因為必須找出哪個位置大於128,哪個位置小於128,再另外做計算
所以先用size函式來找出陣列的維度
size(a,1)表示a的列維度,size(a,2)表示a的行維度
如果a是一張1024*768的圖片,也就是寬為1024像素,高為768像素
那麼size(a,1)=768(圖片的高)、size(a,2)=1024(圖片的寬)
所以我們用以下程式進行判斷並執行灰階圖案的部分補色
如此一來,當a的值滿足if判斷式時,就進行補色,否則等於原圖相同位置處的顏色
本程式以對暗像素做補色為例,改成亮相素就讓if條件式改為大於128
  1. clear
  2. x=imread('test.jpg');
  3. a=x; %if x is a gray image
  4. %a=rgb2gray(x); %if x is a rgb image
  5. for i=1:size(a,1) %size(a,1) represents the row dimension of a
  6.     for j=1:size(a,2) %size(a,2) represents the column dimension of a
  7.         if a(i,j)<128
  8.             b(i,j)=255-a(i,j); %complement
  9.         else
  10.             b(i,j)=a(i,j);
  11.         end
  12.     end
  13. end
  14. imshow(a),figure,imshow(b)
複製代碼
下面是利用一張企鵝圖跑出來的結果
原圖 亮相素補色圖 暗相素補色圖
[attach]96165334[/attach] [attach]96165340[/attach] [attach]96165342[/attach]


如果還有疑問請再提出




歡迎光臨 伊莉討論區 (http://a10.eyny.com/) Powered by Discuz!